拼接数组的Javascript只是替换值而不是删除它

时间:2016-03-17 16:12:48

标签: javascript arrays angularjs

我有一个包含菜单列表的菜单。我希望能够从菜单中删除菜肴,我通过拼接菜单数组中菜肴ID的索引来解决这个问题。 但是,它不是删除值并缩短数组,而是将值替换为数组中的最后一个值。

在一个包含4个菜肴的菜单中,删除其中3个后,该数组仍然包含4个值,所有这些都是相同的。

$scope.fjernRet = function(ret, menu) {
  //console.log(ret._id)
  var index = menu.retter.indexOf(ret._id);
  if (index > -1) {
    menu.retter.splice(index, 1)
  }
  menuService.update(menu);
  socket.syncUpdates('menu', $scope.menuer);
}

menu.retter可能看起来像

[{
    _id: '56e827ba0ec7a8d02bf7747d',
    name: 'test',
    info: 'testinfo',
    type: 'kød',
    active: true
}, {
    _id: '56e827ba0ec7a8d02bf77473',
    name: 'test3',
    info: 'testinfo3',
    type: 'kød',
    active: true
 }, {
    _id: '56e827ba0ec7a8d02bf77474',
    name: 'test4',
    info: 'testinfo4',
    type: 'salat',
    active: false
 }];

1 个答案:

答案 0 :(得分:2)

替换此行:

var index = menu.retter.indexOf(ret._id);

由此:

var index = menu.retter.map(function(x){
    return x._id
}).indexOf(ret._id);

Array.map()将返回仅包含_id的映射数组,然后您的.indexOf()才能正常工作。

希望它有所帮助。