编程语言
首页 > 编程语言> > javascript-通过评估元素的数组子集

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] ] 

jsfiddle

更新:纯粹出于兴趣,我采用了当前页面上的所有答案,并为其创建了jsperf.

标签:underscore-js,arrays,javascript
来源: https://codeday.me/bug/20191123/2065398.html