【数组方法大合集】原生js数组array常用工具方法大合集
生活随笔
收集整理的這篇文章主要介紹了
【数组方法大合集】原生js数组array常用工具方法大合集
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
var array = {/* 數(shù)組求和*/sum: arr => eval(arr.join("+")),/* 判斷一個(gè)數(shù)組(支持一個(gè)字符串)里面的是否有任何一個(gè)元素被包含在了某個(gè)字符串里面 */isStringContain(str, arr) {Array.isArray(arr) || (arr = [arr]);for (var i = 0, len = arr.length; i < len; i++) {if (str.includes(arr[i])) return true; //只要有一個(gè)元素被包含了就終止循環(huán)}return false;},/**獲取數(shù)組最大值*/getMax(arr) {// 利用apply 將數(shù)組元素拆成一個(gè)個(gè)參數(shù)讓Math.max去計(jì)算// return Math.max.apply(null, arr); // ES5寫法;return Math.max(...arr); // ES6寫法;},/**獲取數(shù)組最小值*/getMin(arr) {// 利用apply 將數(shù)組元素拆成一個(gè)個(gè)參數(shù)讓Math.min去計(jì)算// return Math.min.apply(null, arr);// ES5寫法return Math.min(...arr);// ES6寫法;},/**判斷是否為數(shù)組類型*/isArray(o) {return Object.prototype.toString.call(o) == "[object Array]";},/**刪除數(shù)組中指定元素*/removeFirstByValue(val) {for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];if (a == val) {arr.splice(i, 1);break;}}return arr;/*測(cè)試用例*//*var arr = ["mon", "tue", "wed", "thur"];alert(removeFirstByValue(arr, "wed"));*/},/**刪除數(shù)組中指定匹配的所有元素*/removeAllByValue(val) {var newArr = [];for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];a != val && newArr.push(a);}return newArr;/*測(cè)試用例*//*var arr = ["mon", "tue", "wed","wed","wed", "thur"];alert(removeAllByValue(arr, "wed"));*/},/**刪除對(duì)應(yīng)鍵值的→第一個(gè)元素*/removeFirstByMatchKey(arr, macthKey, matchKeyValue) {for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];if (a[macthKey] == matchKeyValue) {arr.splice(i, 1);break;}}return arr;},/**刪除對(duì)應(yīng)鍵值的→所有元素*/removeAllByMatchKey(arr, macthKey, matchKeyValue) {var newArr = [];for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];a[macthKey] != matchKeyValue && newArr.push(a);}return newArr;},/**移動(dòng)數(shù)組里面的對(duì)應(yīng)元素step個(gè)位置,注意!!!會(huì)直接修改原數(shù)組*/moveArray(arr, index, step) {/*如step為負(fù)數(shù),則往前面移動(dòng)對(duì)應(yīng)步數(shù)。如:-2往前移動(dòng)兩步,3往后移動(dòng)三步*/var moveToIndex = index + step;moveToIndex < 0 && (moveToIndex = arr.length - 1);moveToIndex > arr.length - 1 && (moveToIndex = 0);arr.splice(moveToIndex, 0, arr.splice(index, 1)[0]);return arr;/*測(cè)試用例*//*var arr = ['第一個(gè)', '第二個(gè)', '第三個(gè)', '第四個(gè)']; array.moveArray(arr, 1, -2); /!*第二個(gè)元素往前移動(dòng)2步,將會(huì)移動(dòng)到數(shù)組最后一個(gè)位置*!/ console.log(arr);*/},/**把數(shù)組里面的對(duì)應(yīng)元素插入到某個(gè)位置,注意!!!會(huì)直接修改原數(shù)組*/jumpQueue: function (arr, currentIndex, targetIndex) {/*把數(shù)組arr里面的currentIndex索引插到targetIndex索引位置*/if (!arr || arr.length === 0) return console.log("%c報(bào)錯(cuò)信息:", "background:red;color:white;padding:5px;border-radius:5px;", "arr不能為空");if (currentIndex < 0 || targetIndex < 0 || currentIndex > arr.length - 1 || targetIndex > arr.length - 1) return console.log("%c報(bào)錯(cuò)信息:", "background:red;color:white;padding:5px;border-radius:5px;", "currentIndex或者targetIndex超出了arr的索引范圍");arr.splice(targetIndex, 0, arr.splice(currentIndex, 1)[0]);return arr;/*測(cè)試用例*//*var arr = ['第一個(gè)', '第二個(gè)', '第三個(gè)', '第四個(gè)']; array.jumpQueue(arr, 3, 0); /!*第四個(gè)元素插隊(duì)到第一個(gè)位置*!/ console.log(arr);*/},/**對(duì)比兩個(gè)數(shù)組不同元素,從第一個(gè)數(shù)組里面排除第二個(gè)數(shù)組里面相同元素,isAddBdiffPart為true時(shí)加入第二個(gè)數(shù)組不同部分返回結(jié)果*/getdiffarr(A, B, isAddBdiffPart) {var C = [];var D = [];var Astr = "," + A.toString() + ",";var Bstr = "," + B.toString() + ",";for (var i in A) {if (!Bstr.includes("," + A[i] + ",")) {C.push(A[i]);}}for (var p in B) {if (!Astr.includes("," + B[p] + ",")) {D.push(B[p]);}}return isAddBdiffPart ? C.concat(D) : C;/*測(cè)試用例*//*var F = array.getdiffarr([9, 7, 1, 2, 3, 4], [3, 4, 1, 8], true); console.log(F);*/},/**數(shù)組排序:isAsc=true升序;isAsc=false降序*/getSort(arr, isAsc) {var arr = arr.concat();arr.sort(function (a, b) {return isAsc ? a - b : b - a;});return arr;},/**關(guān)聯(lián)數(shù)組排序:isAsc=true升序;isAsc=false降序*/getSortByKey(arr, key, isAsc) {var o = arr.concat();o.sort(function (a, b) {return isAsc ? a[key] - b[key] : b[key] - a[key];});return o;},/**數(shù)組對(duì)象根據(jù)某個(gè)值相同合并分組(collectKeyName是用于比對(duì)合并的鍵值,addOtherKeys是附加的鍵值)*/collect(arr, collectKeyName, addOtherKeys) {var map = {}, arr2 = [];for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];if (!map[a[collectKeyName]]) {var obj = {collectName: a[collectKeyName], collectValue: [a]};/*追加可選鍵值*/var arr3 = addOtherKeys || [];for (var k = 0, len3 = arr3.length; k < len3; k++) {var c = arr3[k];obj[c] = a[c];}arr2.push(obj);map[a[collectKeyName]] = a;} else {for (var j = 0, len2 = arr2.length; j < len2; j++) {var b = arr2[j];if (b.collectName == a[collectKeyName]) {b.collectValue.push(a);break;}}}}return arr2;},/**獲取ID→對(duì)應(yīng)的記錄*/getById(arr, id) {return this.getByMatchKey(arr, "id", id);},/**獲取ID→對(duì)應(yīng)的值*/getValueById(arr, id) {var re = this.getById(arr, id);return re ? re.value : null;},/**獲取對(duì)應(yīng)值的→ID*/getIdByValue(arr, value) {var re = this.getByMatchKey(arr, "value", value);return re ? re.id : null;},/**獲取對(duì)應(yīng)值的→記錄*/getByMatchKey(arr, matchKey, matchKeyValue) {for (var k in arr) {var a = arr[k];if (a && a[matchKey] == matchKeyValue) {return a;}}},/**獲取對(duì)應(yīng)值的→鍵的值*/getValueByMatchKey(arr, matchKey, matchKeyValue, keyName) {var re = this.getByMatchKey(arr, matchKey, matchKeyValue);return re ? re[keyName] : null;},/**設(shè)置數(shù)組對(duì)應(yīng)ID→對(duì)應(yīng)的key值*/setKeyValueById(arr, id, keyName, keyValue) {this.setValueByMatchKey(arr, "id", id, keyName, keyValue);},/**設(shè)置數(shù)組對(duì)應(yīng)自定義匹配key→對(duì)應(yīng)的值keyValue*/setValueByMatchKey(arr, matchKey, matchKeyValue, keyName, keyValue) {for (var k in arr) {var a = arr[k];if (a && a[matchKey] == matchKeyValue) {a[keyName] = keyValue;}}},/**根據(jù)對(duì)應(yīng)自定義匹配key→對(duì)應(yīng)的值index*/getIndexByMatchKey(arr, matchKey, matchKeyValue) {for (var k in arr) {var a = arr[k];if (a && a[matchKey] == matchKeyValue) {return k; //返回值記得用parseInt()轉(zhuǎn)換為int類型,如果搜索的arr是一個(gè)object對(duì)象則不用轉(zhuǎn)換值類型,返回的就是key的字符串}}},/**根據(jù)value的值獲取元素索引值index*/getIndexByValue(arr, value) {return this.getIndexByMatchKey(arr, "value", value);},/**根據(jù)id的值獲取元素索引值index*/getIndexById(arr, id) {return this.getIndexByMatchKey(arr, "id", id);},/**獲取數(shù)組對(duì)應(yīng)key→對(duì)應(yīng)的valueKey值(key的格式{key: "id", value: 2, valueKey: "b"}),指定對(duì)應(yīng)id等于2的b字段返回值;valueKey為空時(shí)返回整個(gè)元素記錄*/getkeyValueByKeyValue(arr, key) {for (var k in arr) {var a = arr[k];if (a[key.key] == key.value) {return key.valueKey ? a[key.valueKey] : a;}}/*測(cè)試用例*//* console.log(getkeyValueByKeyValue([{id: 1, a: 11, b: 111}, {id: 2, a: 22, b: 222}], {key: "id", value: 2, valueKey: "b"}));*/},/**設(shè)置數(shù)組對(duì)應(yīng)key→對(duì)應(yīng)的valueKey值(key的格式{key: "id", value: 2, setKey: "b", setValue: "999"}),設(shè)置對(duì)應(yīng)id等于2的b字段的值為999*/setkeyValueByKeyValue(arr, key) {for (var k in arr) {var a = arr[k];if (a[key.key] == key.value) {a[key.setKey] = key.setValue;}}return arr;/*測(cè)試用例*//* console.log(setkeyValueByKeyValue([{id: 1, a: 11, b: 111}, {id: 2, a: 22, b: 222}], {key: "id", value: 2, setKey: "b", setValue: 999}));*/},/**根據(jù)by數(shù)組的key對(duì)應(yīng)的值→去from的arr數(shù)組里面查詢key對(duì)應(yīng)的值相同的項(xiàng)并返回?cái)?shù)組,o的結(jié)構(gòu): { from: { arr: arr1, key: "value", }, by: { arr: arr2, key: "id", } } */getArrayByTwoKey(o) {var reArr = [];var arr1 = o.from.arr, k1 = o.from.key, arr2 = o.by.arr, k2 = o.by.key;for (var i = 0, len = arr2.length; i < len; i++) {var b = arr2[i];arr1.forEach(function (a) {a[k1] == (k2 ? b[k2] : b) && reArr.push(a);});}return reArr;},__convertToKeyValueObject(obj) {for (var i in obj) {var a = obj[i];return {"key": i, "value": a};}},/**模糊搜索key→對(duì)應(yīng)的value值(obj的格式{keyName:keyValue})*/searchArrayByKey(arr, obj) {var reArr = [];obj = this.__convertToKeyValueObject(obj);for (var k in arr) {var a = arr[k];if (a[obj.key].toString().includes(obj.value)) {reArr.push(a);}}return reArr;},/**模糊搜索→全字段值匹配*/searchArrayByValue(arr, value) {var reArr = [];for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];for (var k in a) {var b = a[k];if (b.toString().toLowerCase().includes(value.toLowerCase())) {reArr.push(a);break;}}}return reArr;},/**獲取longString字符串中被startStr和end重復(fù)夾住的字符串*/getBetween(longString, startStr, endStr) {var arr = longString.split(startStr), reArr = [];arr.shift();for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];reArr.push(a.split(endStr)[0]);}return reArr;},/**用指定字符串分割將相同元素歸類,并返回新的數(shù)組*/getSortOutArrayBySplit(arr, splitStr) {var retArr = [], ind = -1, oldValue;for (var i = 0, len = arr.length; i < len; i++) {var newValue = arr[i];oldValue == newValue ? (retArr[ind] = retArr[ind] + (splitStr || "/") + newValue) : (oldValue = newValue, ind++, retArr[ind] = newValue);}return retArr;/* 測(cè)試用例var subList = [1, 1, 1, 2, 2, 3, 3];console.log(array.getSortOutArrayBySplit(subList,'/'));//output: ["1/1/1", "2/2", "3/3"];*/},/**去重(效率最高的方法)*/distinct(arr) {var re = [], obj = {};for (var i of arr) {obj[i] || (re.push(i), obj[i] = true);}return re;// return [...new Set(arr)];//去重最精簡(jiǎn)方法},/** es6語法:過濾JS數(shù)組中的空值,假值等(es6語法) */filterNullUndefined: arr => arr.filter(item => item)
//測(cè)試用例
//console.log(array.filterNullUndefined([undefined, undefined, 1, "", "false", false, true, null, "null"]));
};
?
總結(jié)
以上是生活随笔為你收集整理的【数组方法大合集】原生js数组array常用工具方法大合集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Copy复制命令兼容各种浏览器(等同于触
- 下一篇: 马赛克背景图样式