[英]How to get index of object in array of objects and splice it?
我正在使用angular 1.3,但他的問題可能僅與javascript有關。
我的候選人數組:
var candidates = [
{ "attr1": "lu", "attr2": "pizza" },
{ "attr1": "gina", "attr2": "sushi" },
{ "attr1": "hed", "attr2": "hummus" }
];
我的民族陣列:
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
我也有一些復選框:
<div class="checkbox" ng-repeat="d in candidates ">
<label>
<input name="d[]" type="checkbox"ng-click="addRemove(d)" ng-value="d">
{{d.attr1}}
</label>
所以我有一個功能(從候選對象)切換一個項目,我想添加或刪除(如果已經存在)
$scope.addRemove = function (item) {
var idx = peoples.indexOf(item);
if (idx > -1) {
peoples.splice(idx, 1);
}
else {
peoples.push(item);
}
};
由於某些原因, if (idx > -1)
永遠不會為真,即使添加的項目已經存在,它也會保持添加狀態。
indexOf不會按值比較對象,而是按引用比較對象。 您可以執行以下操作。
(抱歉更新了我的答案以獲取“ idx”,如果存在則不提供)
你可以這樣做 :
var idx = peoples.map(function(p){ return p.attr2;}).indexOf(item.attr2);
if (idx) {
peoples.splice(idx, 1);
}
else {
peoples.push(item);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.