如何将JavaScript数组分成两组?
将JavaScript数组分成两组相对容易。根据您的需求,您可能已经知道每个值属于哪个组,或者您可能需要使用一个函数来确定。
从概念上讲,这两种解决方案非常相似。使用Array.prototype.reduce()
和一个回调函数来确定每个元素属于哪个组。一个真值将把元素放入第一组,而一个假值将把元素放入第二组。
根据值将数组分组
如果每个组中的值事先已知,您可以使用一个布尔值数组来确定每个元素属于哪个组。
const bifurcate = (arr, filter) =>
arr.reduce(
(acc, val, i) => {
acc[filter[i] ? 0 : 1].push(val);
return acc;
},
[[], []]
);
bifurcate(['beep', 'boop', 'foo', 'bar'], [true, true, false, true]);
// [ ['beep', 'boop', 'bar'], ['foo'] ]
请注意,filter
数组的长度必须与arr
数组相同。如果长度较短,剩余的元素将放入第二组。如果长度较长,额外的元素将被忽略。
根据函数将数组分组
如果每个组中的值事先不知道,您可以使用一个函数来确定每个元素属于哪个组。该函数将以当前元素和其索引作为参数,并应返回一个真值,如果元素属于第一组,则返回一个假值,如果元素属于第二组,则返回一个假值。
const bifurcateBy = (arr, fn) =>
arr.reduce(
(acc, val, i) => {
acc[fn(val, i) ? 0 : 1].push(val);
return acc;
},
[[], []]
);
bifurcateBy(['beep', 'boop', 'foo', 'bar'], x => x[0] === 'b');
// [ ['beep', 'boop', 'bar'], ['foo'] ]
注意,fn
返回的值将会被强制转换为布尔值。