我正在尝试使用下划线从 javascript 中的数组中获取一系列子集。这是我想要实现的目标:
Original array: [1,1,1,2,2,2,0,0,0,1,1,1]
Expected result: [1,1,1] [2,2,2] [0,0,0] [1,1,1]
当我使用下划线的过滤方法时,我得到了三个数组:[1,1,1,1,1,1] [2,2,2] [0,0,0];
我希望最后一个 1 数组不会混合。
我尝试过的:
_.filter(array, function(e){
return e === 1;
})
拆分原数组的准则是连续相等的数必须组成一个新的数组,但如果该数在原数组后面出现,则该连续相等的数必须组成一个新数组。
有没有办法使用下划线来做到这一点,还是应该用循环来完成?
谢谢
最佳答案
不确定 underscrore.js 中是否有特定的东西可以做到这一点,但我确信它可以用下划线语法来完成。但是,您可以在 POJS 中执行类似的操作。
Javascript
var testArray = [NaN, NaN, NaN, undefined, undefined, undefined, null, null, null, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1];
function is(x, y) {
if (x === y) {
if (x === 0) {
return 1 / x === 1 / y;
}
return true;
}
var x1 = x,
y1 = y;
return x !== x1 && y !== y1;
}
function arraySplitToGroups(array) {
var length = array.length,
i = 0,
newArray = [],
subArray = [],
current,
last;
while (i < length) {
current = array[i];
if (!is(last, current)) {
if (subArray.length) {
newArray.push(subArray);
}
subArray = [];
}
subArray.push(current);
last = current;
i += 1;
}
if (subArray.length) {
newArray.push(subArray);
}
return newArray;
}
console.log(arraySplitToGroups(testArray));
输出
[ [NaN, NaN, NaN], [undefined, undefined, undefined], [null, null, null], [1, 1, 1], [2, 2, 2], [0, 0, 0], [1, 1, 1] ]
关于 jsfiddle
更新:出于纯粹的兴趣,我获取了当前页面上的所有答案并创建了一个 jsperf。为他们。
关于javascript - 通过评估元素的数组子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163742/