本文翻译自 Chalarangelo30 seconds of code - Array 一节,并添加自己的学习笔记
不定期更新
转载请注明

Array

chunk

把一个数组分块成指定大小的小数组。
使用 Array.from() 创建一个新的数组,它适合将要生成的块的数量。 使用 Array.slice() 将新数组的每个元素映射到长度为 size 的块。如果原始数组不能均匀分割,最后的块将包含剩余的元素。

1
2
3
4
const chunk = (arr, size) =>
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
arr.slice(i * size, i * size + size)
);


Examples
1
chunk([1, 2, 3, 4, 5], 2); // [[1,2],[3,4],[5]]



Notes
Array.from()
语法
> Array.from(arrayLike, mapFn, thisArg)
> 参数
>> arrayLike
>>> 想要转换成数组的伪数组对象或可迭代对象。

>> mapFn (可选参数)
>>> 如果指定了该参数,新数组中的每个元素会执行该回调函数。

>> thisArg (可选参数)
>>> 可选参数,执行回调函数 mapFn 时 this 对象。

>> 返回值
>>> 一个新的数组实例

Array.from() 可以通过以下方式来创建数组对象:
> 伪数组对象(拥有一个 length 属性和若干索引属性的任意对象)
> 可迭代对象(可以获取对象中的元素,如 Map 和 Set 等)

生成一个数字序列
由于数组在每个位置都以 undefined 初始化,下面 v 的值将是 undefined
1
Array.from({length: 5}, (v, i) => i); // [0, 1, 2, 3, 4]



compact

从一个数组中移除掉值为false的值。
使用 Array.filter() 过滤掉值为false的值(false ,null, 0, undefined, 和 NaN

1
const compact = arr => arr.filter(Boolean);


Examples
1
compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34]); // [ 1, 2, 3, 'a', 's', 34 ]


countBy

根据给定的函数对数组的元素进行分组,并返回每组中元素的数量。
使用 Array.map() 将数组的值映射到函数或属性名称。 使用 Array.reduce() 创建一个对象,其中的关键字是从映射结果中产生的。

1
2
3
4
5
const countBy = (arr, fn) =>
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});


Examples
1
2
countBy([6.1, 4.2, 6.3], Math.floor); // {4: 1, 6: 2}
countBy(['one', 'two', 'three'], 'length'); // {3: 2, 5: 1}


countOccurrences

计算数组中值的出现次数。
每次遇到数组中的特定值时,使用 Array.reduce() 来递增计数器。

1
const countOccurrences = (arr, val) => arr.reduce((a, v) => (v === val ? a + 1 : a + 0), 0);


Examples
1
countOccurrences([1, 1, 2, 1, 2, 3], 1); // 3


deepFlatten

深度平整阵列。
使用递归。将 Array.concat() 与空数组([])和展开运算符(…)一起使用以平铺数组。递归地扁平每个元素是一个数组。

1
const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));


Examples
1
deepFlatten([1, [2], [[3], 4], 5]); // [1,2,3,4,5]


difference

differenceWith

distinctValuesOfArray

dropElements

dropRight

everyNth

filterNonUnique

findLast

flatten

forEachRight

groupBy

indexOfAll

initial

initialize2DArray

initializeArrayWithRange

initializeArrayWithValues

intersection

isSorted

join

last

longestItem

mapObject

maxN

minN

nthElement

partition

pick

pull

pullAtIndex

pullAtValue

reducedFilter

remove

sample

sampleSize

shuffle

similarity

sortedIndex

symmetricDifference

tail

take

takeRight

union

without

zip

zipObject