首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【30秒一个知识点】Array(一)

本系列翻译自开源项目 30-seconds-of-code 这是一个非常优秀的系列,不是说真的三十秒就能理解,也需要你认真的思考,其中有一些点非常精妙,很值得一读。 本文在我的github同步更新,点击文章末尾阅读全文你可以看到当前翻译的全部系列。 如果您对本期有不同或者更好的见解,请后台留言,喜欢请点个好看,谢谢阅读。

all

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

使用 Array.prototype.every()来测试是否第二个参数 fn以集合中每个元素作为参数都返回 true,使用 Boolean作为默认值。

代码语言:javascript
复制
const all = (arr, fn = Boolean) => arr.every(fn);

示例

代码语言:javascript
复制
all([4, 2, 3], x => x > 1); // trueall([1, 2, 3]); // true

allEqual

检查是否数组中所有的元素都是相等的。

使用 Array.prototype.every() 来检测是否数组中的所有元素都和第一个元素相等。

代码语言:javascript
复制
const allEqual = arr => arr.every(val => val === arr[0]);

示例

代码语言:javascript
复制
allEqual([1, 2, 3, 4, 5, 6]); // falseallEqual([1, 1, 1, 1]); // true

any

如果被提供的断言函数接收数组中任意一个元素作为参数都返回 true,则返回 true,否则返回 false

使用 Array.prototype.every()来测试是否第二个参数 fn以集合中任意一个元素作为参数都返回 true,使用 Boolean作为默认值。

代码语言:javascript
复制
const any = (arr, fn = Boolean) => arr.some(fn);

示例

代码语言:javascript
复制
any([0, 1, 2, 0], x => x >= 2); // trueany([0, 0, 1, 0]); // true

arrayToCSV

将2D数组转换为逗号分隔值(CSV)字符串。

使用 Array.prototype.map()Array.prototype.join(delimiter) 将一个一维数组转换为字符串。

使用 Array.prototype.join('\n') 将所有行合并成CSV字符串, 用换行符分割每一行。

如果没有第二哥参数, delimiter会使用一个默认分隔符 ,.

代码语言:javascript
复制
const arrayToCSV = (arr, delimiter = ',') =>  arr.map(v => v.map(x => `"${x}"`).join(delimiter)).join('\n');

示例

代码语言:javascript
复制
arrayToCSV([['a', 'b'], ['c', 'd']]); // '"a","b"\n"c","d"'arrayToCSV([['a', 'b'], ['c', 'd']], ';'); // '"a";"b"\n"c";"d"'

bifurcate

将数据分为两组,如果元素在 filter数组中对应的是 true,集合中相应的元素应加入第一个数组,否则加入第二个数组。

基于 filter使用 Array.prototype.reduce()Array.prototype.push()将元素分组。

代码语言:javascript
复制
const bifurcate = (arr, filter) =>  arr.reduce((acc, val, i) => (acc[filter[i] ? 0 : 1].push(val), acc), [[], []]);

示例

代码语言:javascript
复制
bifurcate(['beep', 'boop', 'foo', 'bar'], [true, true, false, true]); // [ ['beep', 'boop', 'bar'], ['foo'] ]

bifurcateBy

根据断言函数将数据分成两组,断言函数将指定集合中的元素属于哪个组。如果断言函数返回 true,元素加入第一个数组,否则加入第二个数组。

给予 fn接收元素的返回值,使用 Array.prototype.reduce()Array.prototype.push()将元素分组。

代码语言:javascript
复制
const bifurcateBy = (arr, fn) =>  arr.reduce((acc, val, i) => (acc[fn(val, i) ? 0 : 1].push(val), acc), [[], []]);

示例

代码语言:javascript
复制
bifurcateBy(['beep', 'boop', 'foo', 'bar'], x => x[0] === 'b'); // [ ['beep', 'boop', 'bar'], ['foo'] ]
下一篇
举报
领券