本系列翻译自开源项目 30-seconds-of-code 这是一个非常优秀的系列,不是说真的三十秒就能理解,也需要你认真的思考,其中有一些点非常精妙,很值得一读。 本文在我的github同步更新,点击文章末尾阅读全文你可以看到当前翻译的全部系列。 如果您对本期有不同或者更好的见解,请后台留言,喜欢请点个好看,谢谢阅读。
如果被提供的断言函数接收数组中每个元素作为参数都返回 true
,则返回 true
,否则返回 false
。
使用 Array.prototype.every()
来测试是否第二个参数 fn
以集合中每个元素作为参数都返回 true
,使用 Boolean
作为默认值。
const all = (arr, fn = Boolean) => arr.every(fn);
示例
all([4, 2, 3], x => x > 1); // trueall([1, 2, 3]); // true
检查是否数组中所有的元素都是相等的。
使用 Array.prototype.every()
来检测是否数组中的所有元素都和第一个元素相等。
const allEqual = arr => arr.every(val => val === arr[0]);
示例
allEqual([1, 2, 3, 4, 5, 6]); // falseallEqual([1, 1, 1, 1]); // true
如果被提供的断言函数接收数组中任意一个元素作为参数都返回 true
,则返回 true
,否则返回 false
。
使用 Array.prototype.every()
来测试是否第二个参数 fn
以集合中任意一个元素作为参数都返回 true
,使用 Boolean
作为默认值。
const any = (arr, fn = Boolean) => arr.some(fn);
示例
any([0, 1, 2, 0], x => x >= 2); // trueany([0, 0, 1, 0]); // true
将2D数组转换为逗号分隔值(CSV)字符串。
使用 Array.prototype.map()
和 Array.prototype.join(delimiter)
将一个一维数组转换为字符串。
使用 Array.prototype.join('\n')
将所有行合并成CSV字符串, 用换行符分割每一行。
如果没有第二哥参数, delimiter
会使用一个默认分隔符 ,
.
const arrayToCSV = (arr, delimiter = ',') => arr.map(v => v.map(x => `"${x}"`).join(delimiter)).join('\n');
示例
arrayToCSV([['a', 'b'], ['c', 'd']]); // '"a","b"\n"c","d"'arrayToCSV([['a', 'b'], ['c', 'd']], ';'); // '"a";"b"\n"c";"d"'
将数据分为两组,如果元素在 filter
数组中对应的是 true
,集合中相应的元素应加入第一个数组,否则加入第二个数组。
基于 filter
使用 Array.prototype.reduce()
和 Array.prototype.push()
将元素分组。
const bifurcate = (arr, filter) => arr.reduce((acc, val, i) => (acc[filter[i] ? 0 : 1].push(val), acc), [[], []]);
示例
bifurcate(['beep', 'boop', 'foo', 'bar'], [true, true, false, true]); // [ ['beep', 'boop', 'bar'], ['foo'] ]
根据断言函数将数据分成两组,断言函数将指定集合中的元素属于哪个组。如果断言函数返回 true
,元素加入第一个数组,否则加入第二个数组。
给予 fn
接收元素的返回值,使用 Array.prototype.reduce()
和 Array.prototype.push()
将元素分组。
const bifurcateBy = (arr, fn) => arr.reduce((acc, val, i) => (acc[fn(val, i) ? 0 : 1].push(val), acc), [[], []]);
示例
bifurcateBy(['beep', 'boop', 'foo', 'bar'], x => x[0] === 'b'); // [ ['beep', 'boop', 'bar'], ['foo'] ]