我有一个下面提到的数组。我想使用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",
}
}
]
答案 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];