javascript-通过评估元素的数组子集
作者:互联网
我正在尝试使用下划线从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]
当我从下划线使用filter方法时,得到三个数组:[1,1,1,1,1,1] [2,2,2] [0,0,0];我希望最后的1不会混合在一起.
我尝试过的
_.filter(array, function(e){
return e === 1;
})
拆分原始数组的标准是连续的相等数字必须形成一个新的数组,但是如果该数字出现在原始数组的后面,则该连续的相等数字必须形成一个新的数组.
有没有办法使用下划线执行此操作,还是应该使用循环来完成?
谢谢
解决方法:
不知道在underscrore.js中是否有特定的功能可以做到这一点,但是我确定可以使用下划线语法来完成.但是,您可以在POJS中执行类似的操作.
Java脚本
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] ]
更新:纯粹出于兴趣,我采用了当前页面上的所有答案,并为其创建了jsperf.
标签:underscore-js,arrays,javascript 来源: https://codeday.me/bug/20191123/2065398.html