根据值从Object中删除项目

时间:2016-10-06 06:24:36

标签: javascript object-detection

我的结构如下:

var value = 4;

对象值如下图所示(console.log)

enter image description here

我希望在与player_id匹配时删除整行。 我在下面使用,但看起来它无法删除整行(因为我可以看到'0:对象',即使在删除之后。

for (var key in obj) {
    if (obj[key].player_id === value) {
        delete obj[key];
        break;
    }
}

2 个答案:

答案 0 :(得分:3)

在数组元素上使用delete时,它将替换为undefined。从数组中删除元素的正确方法是使用array.splice()

删除

var obj = [{
  player_id: 1,
  team_id: 2
}, {
  player_id: 2,
  team_id: 2
}, {
  player_id: 3,
  team_id: 1
}, {
  player_id: 4,
  team_id: 1
}]

var value = 4;

for (var key in obj) {
    if (obj[key].player_id === value) {
        delete obj[key];
        break;
    }
}
console.log(obj)

方法Array.splice

var obj = [{
  player_id: 1,
  team_id: 2
}, {
  player_id: 2,
  team_id: 2
}, {
  player_id: 3,
  team_id: 1
}, {
  player_id: 4,
  team_id: 1
}]

var value = 4;

for (var i =0; i< obj.length; i++) {
    if (obj[i].player_id === value) {
        obj.splice(i,1)
        break;
    }
}
console.log(obj)

此外,for..in适用于对象。您应该使用for或任何其他数组函数来遍历数组。

Array.findIndex

var obj = [{
  player_id: 1,
  team_id: 2
}, {
  player_id: 2,
  team_id: 2
}, {
  player_id: 3,
  team_id: 1
}, {
  player_id: 4,
  team_id: 1
}]

var value = 4;

var index = obj.findIndex(x=>x.player_id === value);
obj.splice(index,1)
console.log(obj)

注意: array.findIndex是ES6的一部分,并且会出现兼容性问题。请在使用前咨询。

答案 1 :(得分:1)

我认为这就是你所需要的

<source>
   @type tail
   path /var/log/nginx/access.log
   pos_file /var/log/access.log.pos
   tag apache.access
   format nginx
</source>

<match apache.access>
   @type stdout
</match>

希望这会有所帮助:)