抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Mr.wang

Time flies and people come and go

记录开发中的数组处理的方法

技巧及有趣的方法

数组方法

获得一组数的平均值

1
2
3
const average = (...args) => args.reduce((a, b) => a + b) / args.length;

average(1, 2, 3, 4, 5); // 3

深层数组对象,递归调用找出相对于的 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); //=>list=[0,1,2,3,4,5,6,7,8,9]

数组的去重

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)]; //=>uniqueList= [1,2,45,5,4,245]
// indexOf实现
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;
}
// filter实现
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);
}
// a,b,c

数组对象的去重

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);
//sortArr([0,5,7,87,2]) ==>[87, 7, 5, 2, 0]
//从小到大
const sortArr = (array, number = 1) => [...array].sort((x, y) => x - y);
//sortArr([0,5,7,87,2]) ==>[0, 2, 5, 7, 87]

数组对象(根据对象的某个键排序)

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); //->1,2

删除数组里 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; // i - 1 ,因为空元素在数组下标 2 位置,删除空之后,后面的元素要向前补位,
// 这样才能真正去掉空元素,觉得这句可以删掉的连续为空试试,然后思考其中逻辑
}
}
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); //=> [{id: 3, name: '3号'}]

多维数组转换成一维数组

采用递归的思路处理

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); //[{id: 1, name: "数据1"},{id: 3, name: "数据3"}]

评论