我有[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);
}
}
});
答案 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个副本,第一个用于迭代,第二个用于删除。