Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于键值组合从数组中删除对象_Javascript_Arrays_Json - Fatal编程技术网

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;
    });
}
可能的重复可能的重复