1、将值转换为数组
const castArray = (value) => (Array.isArray(value) ? value : [value]);
实例
castArray ( 1 ) ; // [1]
castArray ( [ 1 , 2 , 3 ] ) ; // [1, 2, 3]
2、检查数组是否为空
// `arr` is an array
const isEmpty = (arr) => Array.isArray(arr) && !arr.length;
Examples
isEmpty([]); // true
isEmpty([1, 2, 3]); // false
3、克隆数组
// `arr` is an array
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);
4、比较两个数组而不考虑顺序
// `a` and `b` are arrays
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
5、比较两个数组
// `a` and `b` are arrays
const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
// Or
const isEqual = (a, b) => a.length === b.length &&
a.every((v, i) => v === b[i]);
example
isEqual([1, 2, 3], [1, 2, 3]); // true
isEqual([1, 2, 3], [1, '2', 3]); // false
6、将对象数组转换为自定义键的单个对象
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]));
7、将字符串数组转换为数字
const toNumbers = (arr) => arr.map(Number);
// Or
const toNumbers = (arr) => arr.map((x) => +x);
example
toNumbers(['2', '3', '4']); // [2, 3, 4]
8、按对象数组的属性计数
const countBy = (arr, prop) => arr.reduce((prev, curr) =>
((prev[curr[prop]] = ++prev[curr[prop]] || 1), prev), {});
9、 计算数组中某个值的出现次数
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;
Examples
countOccurrences([2, 1, 3, 3, 2, 3], 2); // 2
countOccurrences(['a', 'b', 'a', 'c', 'a', 'b'], 'a'); // 3
10、计算数组元素的出现次数
const countOccurrences = (arr) => arr.reduce((prev, curr) =>
((prev[curr] = ++prev[curr] || 1), prev), {});
example
countOccurrences([2, 1, 3, 3, 2, 3]); // { '1': 1, '2': 2, '3': 3 }
countOccurrences(['a', 'b', 'a', 'c', 'a', 'b']); // { 'a': 3, 'b': 2, 'c': 1 }
11、创建一个累计数组
const accumulate = (arr) =>
arr.map(
(
(sum) => (value) =>
(sum += value)
)(0)
);
// Or
const accumulate = (arr) => arr.reduce((a, b, i) =>
(i === 0 ? [b] : [...a, b + a[i - 1]]), [0]);
example
accumulate([1, 2, 3, 4]); // [1, 3, 6, 10]// 1 = 1
// 1 + 2 = 3
// 1 + 2 + 3 = 6
// 1 + 2 + 3 + 4 = 10
12、 在给定范围内创建一个数字数组
const range = (min, max) => [...Array(max - min + 1).keys()]
.map((i) => i + min);
// Or
const range = (min, max) =>
Array(max - min + 1)
.fill(0)
.map((_, i) => min + i);
// Or
const range = (min, max) => Array.from({ length: max - min + 1 },
(_, i) => min + i);
example
range(5, 10); // [5, 6, 7, 8, 9, 10]