如果对象尚不存在,我想将其添加到数组中,如果它已存在于数组中,则将其删除。我成功添加了第一个项目,但如果我在数组中添加其他对象,则它不起作用。我可以删除第一项。有一个bug,我不知道为什么。
这是我的代码:
function checkAmi(pseudo, id) {
var info = ({
pseudo: pseudo,
id: id
});
if (amisNotifies.length > 0) {
// iterate over each element in the array
for (var i = 0; i < amisNotifies.length; i++) {
console.log(angular.toJson(amisNotifies[i].pseudo));
// look for the entry with a matching `code` value
if (amisNotifies[i].pseudo === pseudo) {
amisNotifies.removeValue('pseudo', pseudo);
$("#checkAmi" + id).addClass("fa-circle-o");
$("#checkAmi" + id).removeClass("fa-check-circle-o");
} else {
amisNotifies.push(info);
$("#checkAmi" + id).removeClass("fa-circle-o");
$("#checkAmi" + id).addClass("fa-check-circle-o");
}
}
} else {
amisNotifies.push(info);
$("#checkAmi" + id).removeClass("fa-circle-o");
$("#checkAmi" + id).addClass("fa-check-circle-o");
}
}
Run Code Online (Sandbox Code Playgroud)
onm*_*133 15
你可以这样做
const addOrRemove = (array, item) => {
const exists = array.includes(item)
if (exists) {
return array.filter((c) => { return c !== item })
} else {
const result = array
result.push(item)
return result
}
}
Run Code Online (Sandbox Code Playgroud)
已测试
这是另一个简单的解决方案:
var newItem = "NEW_ITEM_TO_ARRAY";
var array = ["OLD_ITEM_1", "OLD_ITEM_2"];
array.indexOf(newItem) === -1 ? array.push(newItem) : array.splice(array.indexOf(newItem), 1);
console.log(array)
Run Code Online (Sandbox Code Playgroud)
如果未找到 indexOf 将返回 -1,这意味着如果它不存在,您将添加 .. 了解更多信息:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/数组/indexOf
否则,如果找到,意味着它存在,您将使用 splice 将其删除,第一个参数是索引,第二个参数是您将删除的元素数量:更多信息:https : //developer.mozilla.org/en -US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
通过将每个项目与pseudo进行比较,您错误地检查了重复项。您需要循环遍历所有项目以查看是否匹配任何项目,然后根据匹配执行添加/删除。以下代码适合您。
function checkAmi(pseudo, id) {
var info = ({
pseudo: pseudo,
id: id
});
var getIndexOf = function (psdu) {
for (var i = 0; i < amisNotifies.length; i++) {
if (amisNotifies[i].pseudo === psdu) {
return i;
}
}
return -1;
};
if (amisNotifies.length > 0) {
var index = getIndexOf(pseudo);
if (index > -1) {
//so already exists. now remove it.
Array.prototype.splice.call(amisNotifies, index, 1);
$("#checkAmi" + id).addClass("fa-circle-o");
$("#checkAmi" + id).removeClass("fa-check-circle-o");
}
else {
//does not exist, now add it
amisNotifies.push(info);
$("#checkAmi" + id).removeClass("fa-circle-o");
$("#checkAmi" + id).addClass("fa-check-circle-o");
}
} else {
amisNotifies.push(info);
$("#checkAmi" + id).removeClass("fa-circle-o");
$("#checkAmi" + id).addClass("fa-check-circle-o");
}
}
Run Code Online (Sandbox Code Playgroud)