从对象数组中删除所有具有相同名称的键

时间:2018-08-07 16:54:41

标签: javascript

我有一个Javascript对象数组,我想清除键名称为id的所有键值对。我该怎么办?

示例输入:

var s = [{
  items:[{
    id: 1,
    items:[{
      items:[{
        id: 2,
        items:[]
      }]
    }]
  }],
  id: 3
}]

示例输出:

var s = [{
  items:[{
    items:[{
      items:[{
        items:[]
      }]
    }]
  }]
}]

2 个答案:

答案 0 :(得分:2)

您可以使用像这样的递归函数:

function removeKey(obj, searchKey) {
  for(objKey in obj) {
    if (objKey === searchKey)
      delete obj[objKey];
    else if (typeof obj[objKey] === 'object')
      removeKey(obj[objKey], searchKey);
  }
}

removeKey(yourObj, 'id')

示例: http://jsfiddle.net/bsnfqkL9/3/

答案 1 :(得分:1)

您可以使用生成器美化迭代:

 function* flattenItems(items) {
  for(const item of items) {
    yield item;
    yield* flattenItems(item.items);
  }
}

所以您的任务非常简单:

 for(const item of flattenItems(s))
   delete item.id;