从对象中删除项目

时间:2018-07-07 10:38:18

标签: javascript

我有一个看起来像这样的对象:

{
 "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;
    }
}

5 个答案:

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