如何使用JavaScript从条件中删除数组中的项目

时间:2017-11-15 04:39:03

标签: javascript object

我有一个下面提到的数组。我想使用JavaScript从数组中删除具有空属性值的项目。

实际数组:

[
    {
        "href":"/client",
        "methods":[]
    },
    {
        "href":"/home",
        "methods":
            {
                "type1":"GET",
                "type2":"POST",
            }
    },
    {
        "href":"/about",
        "methods":[]
    },
    {
        "href":"/contact",
        "methods":
            {
                "type1":"GET",
                "type2":"POST",
            }
    }
]

期待结果:

[
    {
        "href":"/home",
        "methods":
            {
                "type1":"GET",
                "type2":"POST",
            }
    },
    {
        "href":"/contact",
        "methods":
            {
                "type1":"GET",
                "type2":"POST",
            }
    }
]

5 个答案:

答案 0 :(得分:2)

这是filter的工作。但是过滤器不会修改现有数组,因此您需要将其分配给不同的数组/覆盖当前变量

a = a.filter(item => Object.keys(item.methods).length > 0)

答案 1 :(得分:1)

迭代对象数组并根据methods属性长度进行过滤。

var obj = [...];
obj = obj.filter((val) => val.methods && val.methods.length !== 0);

答案 2 :(得分:0)

对于方法,您可以轻松地遍历对象,然后在键上调用delete,其值为空....或空数组。我扩展了答案,不仅涵盖了数组为空的方法的键,还包括了我将其定义为空内容的所有键。

var l = [];
for (var i = 0; i < l.length; i++){
  var keys = Object.keys(l[i]);
  for ( var j = 0; j < keys.length; j++){
    var value = keys[j];
    // In your use case, you are only doing arrays so i coded it as such.
    if (value.length == 0){
      delete l[i][j];
    }
  }
}

如果要扩展它以涵盖各种情况,例如空字符串,空数组,空映射或空值,您可以定义一个函数来执行此操作。

function isValueDeletable(value){
  if (value == null) return true;
  if (value == "") return true;
  if (value instanceof Array && value.length == 0) return true;
  if (value instanceof Map && Object.keys(value).length == 0) return true;
  return false;
}

并应用它而不是value.length == 0;

if (isValueDeletable(value)){ delete l[i][j]; }

然后修改l以删除所有具有空值的键。

答案 3 :(得分:0)

尝试以下方法:

var myArr = [
    {
        "href":"/client",
        "methods":[]
    },
    {
        "href":"/home",
        "methods":
            {
                "type1":"GET",
                "type2":"POST",
            }
    },
    {
        "href":"/about",
        "methods":[]
    },
    {
        "href":"/contact",
        "methods":
            {
                "type1":"GET",
                "type2":"POST",
            }
    }
];

var res = [];
myArr.filter(function(val, index){
  if(!(Object.keys(val.methods).length === 0 && val.methods.constructor === Array)){
    res.push(val);
  }
})

console.log(res);

答案 4 :(得分:-1)

输入var json = {};

var key =&#34; giveitakeyvalue&#34;;

json [key] = null;

删除json [key];