判断两个数组是否相等
// a和b都是数组
const isEqual = (a, b) => JSON.stringify([...new Set(a)].sort()) === JSON.stringify([...new Set(b)].sort());
// 实现效果
isEqual([1, 2, 3], [1, 2, 3]); // true
isEqual([1, 2, 3], [1, 3, 2]); // true
isEqual([1, 2, 3], [1, '2', 3]); // false
- 通过 Set对象 对数组进行去重
- 然后利用 sort() 方法排序去重后的数组
- 最后将该数组转成JSON字符串判断字符串是否相等
将值转换为数组
const castArray = (value) => (Array.isArray(value) ? value : [value]);
//实现效果
castArray(1); // [1]
castArray([1, 2, 3]); // [1, 2, 3]
判断数组是否为空
const isEmpty = (arr) => Array.isArray(arr) && !arr.length;
//实现效果
isEmpty([]); // true
isEmpty([1, 2, 3]); // false
复制一个数组
//arr 为数组
const clone = (arr) => arr.slice(0);
//or
const clone = (arr) => [...arr];
//or
const clone = (arr) => Array.from(arr);
//or
const clone = (arr) => arr.map((x) => x);
//or
const clone = (arr) => JSON.parse(JSON.stringify(arr));
//or
const clone = (arr) => arr.concat([]);
//or
const clone = (arr) => structuredClone(arr);
注:structuredClone()为web平台用于深拷贝的内置函数,目前主流浏览器的最新版均已实现了此 API,Firefox 94,Chrome 98 已支持。
将数组对象转换为单个对象
const toObject = (arr, key) => arr.reduce((a, b) => ({ ...a, [b[key]]: b }), {});
// or
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' },
}
*/
Object.fromEntries() 方法把键值对列表转换为一个对象
得出数组中某个属性的值出现次数对象
const countBy = (arr, prop) => arr.reduce((prev, curr) => ((prev[curr[prop]] = ++prev[curr[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'
);
// { 'audi': 2, 'ford': 2, 'bmw': 1 }
计算数组中值的出现次数
const countOccurrences = (arr, val) => arr.reduce((a, v) => (v === val ? a + 1 : a), 0);
// or
const countOccurrences = (arr, val) => arr.filter((item) => item === val).length;
//实现效果
countOccurrences([2, 1, 3, 3, 2, 3], 2); // 2
countOccurrences(['a', 'b', 'a', 'c', 'a', 'b'], 'a'); // 3