数组的简单使用技巧

91 阅读1分钟

生成数组

生成一个 0-99 的数组

const createArr = (n) => Array.from(new Array(n), (v, i) => i)
const arr = createArr(100// 0 - 99 数组

const createArr = (n) => new Array(n).fill(0).map((v, i) => i)
createArr(100// 0 - 99数组

打乱数组

const randomSort = list => list.sort(() => Math.random() - 0.5)
randomSort([0,1,2,3,4,5,6,7,8,9]) // 随机排列结果

数组去重

将数组中的所有重复的元素只保留一个

const removeDuplicates = list => [...new Set(list)]
removeDuplicates([00245]) // [0,2,4,5]

多数组取交集

取多个数组中的交集

const intersection = (a, ...arr) => [...new Set(a)].filter((v) => arr.every((b) => b.includes(v)))

intersection([1234], [23478], [1349])
// [3, 4]

查找最大值索引

找到一个数组中的最大值的索引

const indexOfMax = (arr) => arr.reduce((prev, curr, ia) => (curr > a[prev] ? i : prev), 0);
indexOfMax([1, 3, 9, 7, 5]); // 2

查找最小值索引

找到一个数组中的最小值的索引

const indexOfMin = (arr) => arr.reduce((prev, curr, ia) => (curr < a[prev] ? i : prev), 0)
indexOfMin([2534109]) // 5

找到最接近的数值

在一个数组中找到一个最接近的值

const closest = (arr, n) => arr.reduce((prev, curr) => (Math.abs(curr - n) < Math.abs(prev - n) ? curr : prev))
closest([2987878972075332417], 50// 33

压缩多个数组

const zip = (...arr) => Array.from({ length: Math.max(...arr.map((a) => a.length)) }, (_, i) => arr.map((a) => a[i]))
zip([1,2,3,4]['a''b''c''d']['A''B''C''D'])
// [[1, 'a''A'][2, 'b''B'][3, 'c''C'][4, 'd''D']]

矩阵交换行和列

将一个矩阵的行和列进行互相交换

const transpose = (matrix) => matrix[0].map((col, i) => matrix.map((row) => row[i]));
transpose(
    [              // [
        [123], //      [1, 4, 7],
        [456], //      [2, 5, 8],
        [789], //      [3, 6, 9],
     ]             //  ]
 );