【30秒一个知识点】Array（二）

chunk

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

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

compact

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

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

countBy

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

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

countOccurrences

Use `Array.prototype.reduce()`在每次遇到数组中的特定值时递增计数器。

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

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

deepFlatten

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

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

difference

`const difference = (a, b) => {  const s = new Set(b);  return a.filter(x => !s.has(x));};`

`difference([1, 2, 3], [1, 2, 4]); // [3]`

differenceBy

`const differenceBy = (a, b, fn) => {  const s = new Set(b.map(fn));  return a.filter(x => !s.has(fn(x)));};`

`differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); // [1.2]differenceBy([{ x: 2 }, { x: 1 }], [{ x: 1 }], v => v.x); // [ { x: 2 } ]`

differenceWith

`const differenceWith = (arr, val, comp) => arr.filter(a => val.findIndex(b => comp(a, b)) === -1);`

`differenceWith([1, 1.2, 1.5, 3, 0], [1.9, 3, 0], (a, b) => Math.round(a) === Math.round(b)); // [1, 1.2]`

drop

`const drop = (arr, n = 1) => arr.slice(n);`

slice(n) 表示取数组下标n以后的元素（含n）

`drop([1, 2, 3]); // [2,3]drop([1, 2, 3], 2); // [3]drop([1, 2, 3], 42); // []`

dropRight

`const dropRight = (arr, n = 1) => arr.slice(0, -n);`

slice(0, -n) 表示取数组第一个到倒数第n个元素（不含-n）

`dropRight([1, 2, 3]); // [1,2]dropRight([1, 2, 3], 2); // [1]dropRight([1, 2, 3], 42); // []`

dropRightWhile

`const dropRightWhile = (arr, func) => {  while (arr.length > 0 && !func(arr[arr.length - 1])) arr = arr.slice(0, -1);  return arr;};`

`dropRightWhile([1, 2, 3, 4], n => n < 3); // [1, 2]`

dropWhile

`const dropWhile = (arr, func) => {  while (arr.length > 0 && !func(arr[0])) arr = arr.slice(1);  return arr;};`

`dropWhile([1, 2, 3, 4], n => n >= 3); // [3,4]`

0 条评论

• [译]【30秒一个知识点】Array（三）

使用 Array.prototype.filter() 创建包含给定数组中所有下标是n的倍数的元素的新数组。

• 【30秒一个知识点】Array（一）

如果被提供的断言函数接收数组中每个元素作为参数都返回 true，则返回 true，否则返回 false。

• [现场实录] VueConf 2019 尤雨溪演讲总结

Chrome DevTools 有约 90 万的周活用户，React 相比有 160 万。Evan 推荐用 Chrome DevTools 来预测 Vue 的项...

• 数据结构Stack

​ 在很多应用中，我们需要维护多个对象的集合，这种操作非常简单。我们可能想要向集合中 加入某个元素，去掉某个元素，以及遍历 集合中的元素并对他们执行某种操...

• JS数组操作

1）delete方法:delete arr[1] 这种方式数组长度不变,此时arr[1]变为undefined了,但是也有好处原来数组的索引也保持不变,此时要遍...

• JavaScript引用类型之Array数组之强大的splice()方法

splice()方法可以说是Array数组最强大的方法,他的用法很多，主要用法是向数组的中部插入项！ 下面是它的用法: arrayObject.splice(i...

• 怀英漫谈9 - JS 数组

所谓的数组，就是一些数据的集合，JS中没有集合的概念，所以集合也是数组的一种。如果你Java用的多，那么这个概念就有点儿难以理解，毕竟从Java的文意来说，集合...

• javascript大法好，不用记

数组的操作 ---- Array.prototype.toString ( ) 把数组转变为字符串，返回字符串，arr.toString(); ---- Arr...

• Java数据结构和算法（二）——数组

上篇博客我们简单介绍了数据结构和算法的概念，对此模糊很正常，后面会慢慢通过具体的实例来介绍。本篇博客我们介绍数据结构的鼻祖——数组，可以说数组几乎能表示一切...