记录开发中的数组处理的方法
技巧及有趣的方法
数组方法
获得一组数的平均值
1 2 3
| const average = (...args) => args.reduce((a, b) => a + b) / args.length;
average(1, 2, 3, 4, 5);
|
深层数组对象,递归调用找出相对于的 id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| let test = [ { id: 1 }, { id: 5, children: [{ id: 6, children: [{ id: 7 }] }] }, { id: 8, children: [{ id: 9, children: [{ id: 10 }] }] }, ]; function deepId(arr, id) { let res; function fn(arr, id) { for (let a of arr) { if (a.id === id) { res = a; } else if (a.children) { !res && fn(a.children, id); } } } fn(arr, id); return res; } deepId(test, 1);
|
一个 map 函数内使用里面对某个子项进行 every 判断是否为数字
1 2 3 4
| value.mpa((v) => { if (v.every((item) => isNaN(item))) { } });
|
无 loop 生成指定长度的数组
1 2
| const List = (len) => [...new Array(len).keys()]; const list = List(10);
|
数组的去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const list = [1, 2, 45, 1, 5, 4, 245, 2]; const uniqueList = [...new Set(list)];
var array = [1, 1, "1"]; function unique(array) { var res = []; for (var i = 0, len = array.length; i < len; i++) { var current = array[i]; if (res.indexOf(current) === -1) { res.push(current); } } return res; }
var array = [1, 2, 1, 1, "1"]; function unique(array) { var res = array.filter(function (item, index, array) { return array.indexOf(item) === index; }); return res; } console.log(unique(array));
|
map 返回就是一个新的数组,也就是说 可以使用 new 进行创建一个数组
for in 使用
1 2 3 4 5
| let object = { a: 1, b: 2, c: 3 }; for (let i = 0 in object) { console.log(i); }
|
数组对象的去重
1 2 3 4 5
| let TempObj = {}; let newArr = [...arr1, ...arr2].reduce((cru, next) => { TempObj[next.id] ? "" : (TempObj[next.id] = true && item.push(next)); return item; }, []);
|
说明:其中 cru 代表的是数组的每次遍历之后的项,next 表示遍历的下一项。
数字数组的排序
1 2 3 4 5 6
| const sortArr = (array, number = 1) => [...array].sort((x, y) => y - x);
const sortArr = (array, number = 1) => [...array].sort((x, y) => x - y);
|
数组对象(根据对象的某个键排序)
sort 函数,根据返回值是一个小于 0,等于 0,大于 0,移动 ab 两者间的位置
1 2 3 4 5 6 7
| [ { id: 3, txt: "是三个" }, { id: 1, txt: "是一个" }, { id: 5, txt: "是五个" }, ].sort((a, b) => { return a.id - b.id; });
|
检查数组对象中的所有对象的 isChecked 键值为 true
1
| const isChecked = (array) => array.every((el) => el.isChecked);
|
检查数组对象中的所有元素是否有一个 isChecked 键值为 true
1
| const isChecked = (array) => array.some((el) => el.isChecked);
|
判断一个对象的某些键值是否有值(必须)
1 2
| const obj = { id: 2, name: "", pwd: "" }; const isChecked = ["id", "name", "pwd"].every((key) => !!obj[key]);
|
过滤空值(数组)
空值指的是没有具体意义的一些值,比如 0,undefined,null,false,空字符串等
1
| let resArr = [1, 2, 0, undefined, null, false, ""].filter(Boolean);
|
删除数组里 undefined 元素
1 2 3 4 5 6 7 8 9 10
| function removeEmptyArrayEle(arr) { for (var i = 0; i < arr.length; i++) { if (arr[i] == "undefined") { arr.splice(i, 1); i = i - 1; } } return arr; }
|
简单利用 filter 删除 undefined,NaN,0,false
1 2
| const compact = (arr) => arr.filter(Boolean); compact([0, 1, false, 2, "", 3, "a", "e" * 23, NaN, "s", 34]);
|
只删除数组内 undefined
1
| const compact = (arr) => arr.filter((v) => v !== "undefined");
|
reduce 删除数据对象内指定 id[]
1 2 3 4 5 6 7 8 9 10
| var tableData = [ { id: 1, name: "1号" }, { id: 2, name: "2号" }, { id: 3, name: "3号" }, ]; var delSelect = [1, 2]; let tempArr = delSelect.reduce((cru, next) => { return cru.filter((e) => e.id !== next); }, tableData); console.log(tempArr);
|
多维数组转换成一维数组
采用递归的思路处理
1 2 3 4 5 6 7 8 9 10 11
| let arr1 = [ [0, 1], [2, 3], [4, [5, 6, 7]], ]; const flattenArr = function (arr) { return arr.reduce((acc, cur) => { return acc.concat(Array.isArray(cur) ? flattenArr(cur) : cur); }, []); }; console.log(flattenArr(arr1));
|
数组对象根据 id 重新取值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| let table1 = [ { id: 1, name: "选中" }, { id: 3, name: "第二选中" }, ]; let table2 = [ { id: 1, name: "数据1" }, { id: 2, name: "数据2" }, { id: 3, name: "数据3" }, { id: 4, name: "数据4" }, { id: 5, name: "数据5" }, { id: 6, name: "数据6" }, ]; let temp = table1.map((t1) => { return table2.find((t2) => t2.id == t1.id); }); console.log(temp);
|