我正在尝试根据键/值组合从数组中删除对象-在我的情况下,将删除所有“非活动”用户。
示例代码如下
var items = [
{ "userID":"694","active": false },
{ "userID":"754","active": true },
{ "userID":"755","active": true },
{ "userID":"760","active": false },
{ "userID":"761","active": false },
{ "userID":"762","active": false }
]
function removeByKey(array, params){
array.some(function(item, index) {
return (array[index][params.key] !== params.value) ? !!(array.splice(index, 1)) : false;
});
return array;
}
for (var i = 0; i < items.length; i++){
var removed = removeByKey(items, {
key: 'active',
value: true
});
}
console.log(removed);
但是每次数组中的最后一个条目包含"active": false
时,它都不会被删除。
感谢您的帮助!
答案 0 :(得分:1)
也许具有这样的功能:
+-----+-----+-----+-----+---------------------+----------+
| st1 | st2 | st3 | st4 | TimeStamp | TimeDiff |
+-----+-----+-----+-----+---------------------+----------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:50:00 | 66 |
+-----+-----+-----+-----+---------------------+----------+
| 5 | 5 | 5 | 5 | 2018-07-23 07:39:07 | 492 |
+-----+-----+-----+-----+---------------------+----------+
答案 1 :(得分:1)
因为如果删除一个元素(让我们说倒数第二个元素),那么for循环将在其索引变小时跳过下一个元素。如果您想使用自定义卸妆功能,则必须这样调用:
let previous;
do {
previous = items.length;
removeByKey(items, {
key: 'active',
value: true
});
} while(previous !== items.length)
但是那实际上效率很低,因此您应该修改删除所有事件的方法,而不是删除所有首次发现的方法({forEach
而不是some
,或者只是filter
)< / p>
答案 2 :(得分:0)
varfilteredItems = items.filter(item => item.active);
答案 3 :(得分:0)
@Jayfee的ES5版本答案:
function removeByKey(array, params){
return array.filter(function (item) {
return item[params.key] !== params.value;
});
}