我正在循环中比较 2 个整数,该循环循环遍历包含 JSON 对象的数组。 JSON 对象包含 ID 和名称。当我单击窗口的关闭按钮时,该窗口应该消失,其他窗口应该保留,但会发生的情况是,如果我关闭 ID 最高的窗口,所有窗口都会关闭,例如,如果我关闭第五个窗口,则 #1 -5 被关闭,但更高的 ID 仍然存在。
ctrl.items = [{
id: 1,
name: "Number one"
},
{
id: 2,
name: "Number two"
},
{
id: 3,
name: "Number three"
}];
ctrl.removeWindow = function(toBeRemovedId) {
console.log("Called: " + toBeRemovedId);
for (var i = ctrl.items.length - 1; i >= 0; i--) {
console.log(ctrl.items[i].id + " " + toBeRemovedId);
if(ctrl.items[i].id == toBeRemovedId) {
ctrl.items.splice(ctrl.items[i], 1);
}
};
}
<div class="window show" id="item_window" ng-repeat="item in itemWindowCtrl.items">
<hgroup>
<h1>{{ item.name}}</h1>
<button class="close" ><span class="fa fa-times fa-lg" ng-click="itemWindowCtrl.removeWindow(item.id)"></span></button>
</hgroup>
<section>
<p>{{ item.id + " " + item.name }}</p>
</section>
</div>
预先感谢您能给我带来的任何线索。
最佳答案
数组拼接函数采用索引,而不是要删除的项目,因此您应该这样做:
ctrl.items.splice(i, 1);
不过循环有点不必要。为什么不直接遍历要删除的项目,而不是按 id 降序循环查找匹配的 id?例如:
ng-click="itemWindowCtrl.removeWindow(item)"
然后在你的 Controller /指令中:
ctrl.items.splice(ctrl.items.indexOf(item), 1);
关于javascript - for 循环行为真的很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565789/