我有一个包含菜单列表的菜单。我希望能够从菜单中删除菜肴,我通过拼接菜单数组中菜肴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
}];
答案 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()
才能正常工作。
希望它有所帮助。