日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【数组方法大合集】原生js数组array常用工具方法大合集

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数组方法大合集】原生js数组array常用工具方法大合集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
var array = {/* 數組求和*/sum: arr => eval(arr.join("+")),/* 判斷一個數組(支持一個字符串)里面的是否有任何一個元素被包含在了某個字符串里面 */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; //只要有一個元素被包含了就終止循環}return false;},/**獲取數組最大值*/getMax(arr) {// 利用apply 將數組元素拆成一個個參數讓Math.max去計算// return Math.max.apply(null, arr);  // ES5寫法;return Math.max(...arr); // ES6寫法;},/**獲取數組最小值*/getMin(arr) {// 利用apply 將數組元素拆成一個個參數讓Math.min去計算// return Math.min.apply(null, arr);// ES5寫法return Math.min(...arr);// ES6寫法;},/**判斷是否為數組類型*/isArray(o) {return Object.prototype.toString.call(o) == "[object Array]";},/**刪除數組中指定元素*/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;/*測試用例*//*var arr = ["mon", "tue", "wed", "thur"];alert(removeFirstByValue(arr, "wed"));*/},/**刪除數組中指定匹配的所有元素*/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;/*測試用例*//*var arr = ["mon", "tue", "wed","wed","wed", "thur"];alert(removeAllByValue(arr, "wed"));*/},/**刪除對應鍵值的→第一個元素*/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;},/**刪除對應鍵值的→所有元素*/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;},/**移動數組里面的對應元素step個位置,注意!!!會直接修改原數組*/moveArray(arr, index, step) {/*如step為負數,則往前面移動對應步數。如:-2往前移動兩步,3往后移動三步*/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;/*測試用例*//*var arr = ['第一個', '第二個', '第三個', '第四個']; array.moveArray(arr, 1, -2); /!*第二個元素往前移動2步,將會移動到數組最后一個位置*!/ console.log(arr);*/},/**把數組里面的對應元素插入到某個位置,注意!!!會直接修改原數組*/jumpQueue: function (arr, currentIndex, targetIndex) {/*把數組arr里面的currentIndex索引插到targetIndex索引位置*/if (!arr || arr.length === 0) return console.log("%c報錯信息:", "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報錯信息:", "background:red;color:white;padding:5px;border-radius:5px;", "currentIndex或者targetIndex超出了arr的索引范圍");arr.splice(targetIndex, 0, arr.splice(currentIndex, 1)[0]);return arr;/*測試用例*//*var arr = ['第一個', '第二個', '第三個', '第四個']; array.jumpQueue(arr, 3, 0); /!*第四個元素插隊到第一個位置*!/ console.log(arr);*/},/**對比兩個數組不同元素,從第一個數組里面排除第二個數組里面相同元素,isAddBdiffPart為true時加入第二個數組不同部分返回結果*/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;/*測試用例*//*var F = array.getdiffarr([9, 7, 1, 2, 3, 4], [3, 4, 1, 8], true); console.log(F);*/},/**數組排序:isAsc=true升序;isAsc=false降序*/getSort(arr, isAsc) {var arr = arr.concat();arr.sort(function (a, b) {return isAsc ? a - b : b - a;});return arr;},/**關聯數組排序: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;},/**數組對象根據某個值相同合并分組(collectKeyName是用于比對合并的鍵值,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→對應的記錄*/getById(arr, id) {return this.getByMatchKey(arr, "id", id);},/**獲取ID→對應的值*/getValueById(arr, id) {var re = this.getById(arr, id);return re ? re.value : null;},/**獲取對應值的→ID*/getIdByValue(arr, value) {var re = this.getByMatchKey(arr, "value", value);return re ? re.id : null;},/**獲取對應值的→記錄*/getByMatchKey(arr, matchKey, matchKeyValue) {for (var k in arr) {var a = arr[k];if (a && a[matchKey] == matchKeyValue) {return a;}}},/**獲取對應值的→鍵的值*/getValueByMatchKey(arr, matchKey, matchKeyValue, keyName) {var re = this.getByMatchKey(arr, matchKey, matchKeyValue);return re ? re[keyName] : null;},/**設置數組對應ID→對應的key值*/setKeyValueById(arr, id, keyName, keyValue) {this.setValueByMatchKey(arr, "id", id, keyName, keyValue);},/**設置數組對應自定義匹配key→對應的值keyValue*/setValueByMatchKey(arr, matchKey, matchKeyValue, keyName, keyValue) {for (var k in arr) {var a = arr[k];if (a && a[matchKey] == matchKeyValue) {a[keyName] = keyValue;}}},/**根據對應自定義匹配key→對應的值index*/getIndexByMatchKey(arr, matchKey, matchKeyValue) {for (var k in arr) {var a = arr[k];if (a && a[matchKey] == matchKeyValue) {return k; //返回值記得用parseInt()轉換為int類型,如果搜索的arr是一個object對象則不用轉換值類型,返回的就是key的字符串}}},/**根據value的值獲取元素索引值index*/getIndexByValue(arr, value) {return this.getIndexByMatchKey(arr, "value", value);},/**根據id的值獲取元素索引值index*/getIndexById(arr, id) {return this.getIndexByMatchKey(arr, "id", id);},/**獲取數組對應key→對應的valueKey值(key的格式{key: "id", value: 2, valueKey: "b"}),指定對應id等于2的b字段返回值;valueKey為空時返回整個元素記錄*/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;}}/*測試用例*//* console.log(getkeyValueByKeyValue([{id: 1, a: 11, b: 111}, {id: 2, a: 22, b: 222}], {key: "id", value: 2, valueKey: "b"}));*/},/**設置數組對應key→對應的valueKey值(key的格式{key: "id", value: 2, setKey: "b", setValue: "999"}),設置對應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;/*測試用例*//* console.log(setkeyValueByKeyValue([{id: 1, a: 11, b: 111}, {id: 2, a: 22, b: 222}], {key: "id", value: 2, setKey: "b", setValue: 999}));*/},/**根據by數組的key對應的值→去from的arr數組里面查詢key對應的值相同的項并返回數組,o的結構: { 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→對應的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重復夾住的字符串*/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;},/**用指定字符串分割將相同元素歸類,并返回新的數組*/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;/* 測試用例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)];//去重最精簡方法},/** es6語法:過濾JS數組中的空值,假值等(es6語法) */filterNullUndefined: arr => arr.filter(item => item)
//測試用例
//console.log(array.filterNullUndefined([undefined, undefined, 1, "", "false", false, true, null, "null"]));
};

?

總結

以上是生活随笔為你收集整理的【数组方法大合集】原生js数组array常用工具方法大合集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。