【问题标题】:Remove object from array based on key-value combination基于键值组合从数组中删除对象
【发布时间】:2018-07-23 16:05:08
【问题描述】:

我正在尝试根据键/值组合从数组中删除对象 - 在我的例子中是删除所有“非活动”用户。

示例代码如下所示

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

感谢任何帮助!

【问题讨论】:

标签: javascript arrays json


【解决方案1】:

也许有这样的功能:

function removeByKey(array, params){

  return array.filter( item => item[params.key] !== params.value)
}

【讨论】:

    【解决方案2】:

    因为如果你删除一个元素(比如说倒数第二个),那么 for 循环将跳过下一个元素,因为它的索引变小了。如果你想继续使用你的自定义卸妆功能,你必须这样称呼它:

    let previous;
    do {
        previous = items.length;
        removeByKey(items, {
          key: 'active',
          value: true
        });
     } while(previous !== items.length)
    

    但这实际上效率很低,所以你应该修改它删除所有出现的方法,而不仅仅是第一个找到的(forEach 而不是some,或者只是filter 它)

    【讨论】:

      【解决方案3】:

      var filteredItems = items.filter(item => item.active);

      【讨论】:

        【解决方案4】:

        @Jayfee 答案的 ES5 版本:

         function removeByKey(array, params){
        
            return array.filter(function (item) {
              return item[params.key] !== params.value;
            });
        }
        

        【讨论】:

          猜你喜欢
          • 2020-01-20
          • 2015-06-19
          • 2017-12-20
          • 1970-01-01
          • 1970-01-01
          • 2020-04-15
          • 2019-09-17
          • 2022-12-18
          • 1970-01-01
          相关资源
          最近更新 更多