从javascript数组中删除数字范围

时间:2017-05-30 13:26:28

标签: javascript jquery arrays scripting logic

我有[2016,2017,2018,2019]

的数组

我的范围从2017年到2017年的价值

因此,结果数组应为[2017],因为我需要删除fromValue和toValue之间的任何范围。

我在下面编写的代码仅删除了2016年和2018年,但没有删除2019年。

我做错了什么,有没有更好的方法来做到这一点?

gNodeIDs.forEach(function (item) {              
    alert("Before if" + item);
    if (item >= fromValue) {
        if (item <= toValue) {                        
        }
        else
        {
            alert("removing" + item);
            var index = test.indexOf(item);
            if (index >= 0) {
                test.splice(index, 1);
            }
        }
    }
    else {
        alert("removing" + item);
        var index = test.indexOf(item);
        if (index >= 0) {
            test.splice(index, 1);
        }

    }
});

2 个答案:

答案 0 :(得分:2)

使用Array.prototype.filter来实现这一目标:

var result = gNodeIDs.filter(function(item) { return item >= fromValue && item <= toValue });
包含所有匹配项的

result数组

答案 1 :(得分:1)

使用Array.prototype.filter是正确的答案,但值得注意的是你没有正确使用forEach函数。根据{{​​3}}

  

forEach()处理的元素范围是在第一次调用回调之前设置的。回调后将不会访问在调用forEach()之后附加到数组的元素。如果更改了数组的现有元素的值,则传递给回调的值将是forEach()访问它们时的值;访问之前删除的元素不会被访问。如果在迭代期间删除了已访问过的元素(例如使用shift()),则会跳过后面的元素 - 请参阅下面的示例。

如果你想使用forEach函数,那么你应该使用相同数组的2个副本,第一个用于迭代,第二个用于删除。