我有一个看起来像这样的对象:
{
"myValues": [
{
"begin": 514,
"end": 597,
"type": "cars"
},
{
"begin": 514,
"end": 597,
"type": "shoes"
},
....
现在,我想删除鞋子类型及其数组中的所有数据。
我正在尝试这样做,但是它不起作用:
for (var item in obj) {
var type = obj[item].type;
if (type == 'shoes') {
console.log('deleted');
delete obj[item].type;
}
}
答案 0 :(得分:3)
根据对象的结构,必须使用<script src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.2.14/cytoscape.min.js"></script>
<div id="cy"></div>
,以便您的代码按预期的方式工作:
obj.myValues
答案 1 :(得分:0)
您需要更深一层的迭代
var obj = {
"myValues": [
{
"begin": 514,
"end": 597,
"type": "cars"
},
{
"begin": 514,
"end": 597,
"type": "shoes"
}
]};
for (var it in obj) {
var value = obj[it];
for(var it2 in value) {
if (value[it2].type == 'shoes') {
console.log('deleted');
delete value[it2].type;
}
}
}
答案 2 :(得分:0)
delete
关键字可用于从对象中删除键,但此处的要求似乎是删除完整的对象。如果是这样,则可以使用filter
方法
var obj = {
"myValues": [{
"begin": 514,
"end": 597,
"type": "cars"
},
{
"begin": 514,
"end": 597,
"type": "shoes"
}
]
}
obj.myValues = obj.myValues.filter(function(item) {
return item.type !== 'shoes'
})
console.log(obj)
答案 3 :(得分:0)
虽然可以使用Array.filter()
,但这是使用Array.reduce()
的另一种方法。
var data = {"myValues": [
{
"begin": 514,
"end": 597,
"type": "cars"
},
{
"begin": 514,
"end": 597,
"type": "shoes"
}]};
var result = data.myValues.reduce(function(acc, value, index){
if(value.type=="shoes") acc.push(value);
return acc;
},[])
console.log(result);
答案 4 :(得分:0)
您可以将filter()
与destructuring
结合使用以缩短代码:
var obj = [
{
"begin": 514,
"end": 597,
"type": "cars"
},
{
"begin": 514,
"end": 597,
"type": "shoes"
},
{
"begin": 514,
"end": 597,
"type": "shoes"
},
{
"begin": 52,
"end": 512,
"type": "cars"
}
];
var res = obj.filter(({type}) => type!== "shoes");
console.log(res);