1. 判断数组为空
const isEmpty = (arr) => Array.isArray(arr) && !arr.length
2. 克隆数组
const clone = (arr) => arr.slice(0)
const clone = (arr) => [...arr]
const clone = (arr) => Array.from(arr)
const clone = (arr) => arr.map((it) => it)
const clone = (arr) => arr.concat([])
3. 数组是否相同
const isEqual = (a,b) => JSON.stringify([...new Set(a)].sort()) === JSON.stringify([...new Set(b)].sort())
const isEqual = (a,b) => a.length === b.length && a.every((v,i) => v === b[i]);
4. 数组转对象
const toObject = (arr,key) => arr.reduce((a,b) => ({...a, [b[key]] : b}), {});
const toObject = (arr,key) => Object.fromEntries(arr.map(it)=> [it[key], it]);
toObject(
[
{ id: '1', name: 'Alpha', gender: 'Male' },
{ id: '2', name: 'Bravo', gender: 'Male' },
{ id: '3', name: 'Charlie', gender: 'Female' },
],
'id'
);
/*
{
'1': { id: '1', name: 'Alpha', gender: 'Male' },
'2': { id: '2', name: 'Bravo', gender: 'Male' },
'3': { id: '3', name: 'Charlie', gender: 'Female' },
}
*/
5. 数据统计
const countBy = (arr,prop) => arr.reduce((all,cur) => ((all[cur[prop]] = ++ all[cur[prop]] || 1), prev), {});
countBy(
[
{ branch: 'audi', model: 'q8', year: '2019' },
{ branch: 'audi', model: 'rs7', year: '2020' },
{ branch: 'ford', model: 'mustang', year: '2019' },
{ branch: 'ford', model: 'explorer', year: '2020' },
{ branch: 'bmw', model: 'x7', year: '2020' },
],
'branch'
);
6. 数组求和
const accumulate = (arr) => arr.reduce((a, b, i) => (i === 0 ? [b] : [...a, b + a[i - 1]]), [0]);
7. 数组分隔
const chunk = (arr, size) => arr.reduce((acc, e , i) => (i % size ? acc[acc.length - 1].push(e) : acc.push([e]), acc), []);
8. 数组去重复
const removeDuplicate = (arr) => arr.filter((i) => arr.indexOf(i) === arr.lastIndexOf(i));
const union = (...arr) => [...new Set(arr.flat())];
9. 数组合并
const merge = (a, b) => [...a, ...b];
const merge = (a, b) => [...new Set([...a, ...b])];
10. 数组两个之间插入一个默认值
const intersperse = (a, s) => [...Array(2 * a.length - 1)].map((_, i) => (i % 2 ? s : a[i / 2]));
11. 数组扁平化
const flat = (arr) =>
[].concat.apply(
[],
arr.map((a) => (Array.isArray(a) ? flat(a) : a))
);
12. 数组交换值
const swapItems = (a, i ,j) => (a[i] && a[j]
&& [...a.slice(0,i), a[j], ...a.slice(i + 1, j), a[i],
...a.slice(j + 1)]) || a;
swapItems([1, 2, 3, 4, 5], 1, 4); // [1, 5, 3, 4, 2]