Javascript 基于键值组合从数组中删除对象
我正试图根据键/值组合从数组中删除对象——在我的例子中,是删除所有“非活动”用户 示例代码如下所示Javascript 基于键值组合从数组中删除对象,javascript,arrays,json,Javascript,Arrays,Json,我正试图根据键/值组合从数组中删除对象——在我的例子中,是删除所有“非活动”用户 示例代码如下所示 var项目=[ {“userID”:“694”,“active”:false}, {“userID”:“754”,“active”:true}, {“userID”:“755”,“active”:true}, {“userID”:“760”,“active”:false}, {“userID”:“761”,“active”:false}, {“userID”:“762”,“active”:fal
var项目=[
{“userID”:“694”,“active”:false},
{“userID”:“754”,“active”:true},
{“userID”:“755”,“active”:true},
{“userID”:“760”,“active”:false},
{“userID”:“761”,“active”:false},
{“userID”:“762”,“active”:false}
]
函数removeByKey(数组、参数){
数组.some(函数(项、索引){
返回(array[index][params.key]!==params.value)!!(array.splice(index,1)):false;
});
返回数组;
}
对于(var i=0;i 控制台日志(已删除)代码>var filteredItems=items.filter(item=>item.active) var filteredItems=items.filter(item=>item.active) 可能有这样的功能:
function removeByKey(array, params){
return array.filter( item => item[params.key] !== params.value)
}
也许有这样的功能:
function removeByKey(array, params){
return array.filter( item => item[params.key] !== params.value)
}
因为如果删除一个元素(比如最后一个),那么for循环将跳过下一个元素,因为它的索引变小了。如果您想继续使用自定义清除器功能,您必须这样调用它:
let previous;
do {
previous = items.length;
removeByKey(items, {
key: 'active',
value: true
});
} while(previous !== items.length)
但这实际上效率很低,因此您应该修改该方法,使其删除所有发生的事件,而不仅仅是第一次发现的(forEach
,而不是some
,或者只是filter
it),因为如果您删除一个元素(比如说最后一个元素),当for循环的索引变小时,它将跳过下一个循环。如果您想继续使用自定义清除器功能,您必须这样调用它:
let previous;
do {
previous = items.length;
removeByKey(items, {
key: 'active',
value: true
});
} while(previous !== items.length)
但这实际上效率很低,因此您应该修改该方法,使其删除所有发生的事件,而不仅仅是第一次发现的事件(forEach
,而不是some
,或者只是filter
it)ES5版本的@Jayfee答案:
function removeByKey(array, params){
return array.filter(function (item) {
return item[params.key] !== params.value;
});
}
@Jayfee答案的ES5版本:
function removeByKey(array, params){
return array.filter(function (item) {
return item[params.key] !== params.value;
});
}
可能的重复可能的重复