根据键值组合从数组中删除对象

时间:2018-07-23 16:05:08

标签: javascript arrays json

我正在尝试根据键/值组合从数组中删除对象-在我的情况下,将删除所有“非活动”用户。

示例代码如下

    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时,它都不会被删除。

感谢您的帮助!

4 个答案:

答案 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;
    });
}