添加或删除数组中的元素

Dio*_*ong 3 javascript arrays

如果对象尚不存在,我想将其添加到数组中,如果它已存在于数组中,则将其删除。我成功添加了第一个项目,但如果我在数组中添加其他对象,则它不起作用。我可以删除第一项。有一个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)

  • 这个答案有一个非常微妙的缺陷,根据用例,这可能是也可能不是问题。在正分支中,您将返回一个全新的数组。然而,在负分支中,您正在改变现有数组并返回它。最佳实践是选择一个策略并保持一致。如果你纯粹是出于功能性的目的,那么你就可以避免突变。 (2认同)

Non*_*404 8

已测试

这是另一个简单的解决方案:

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


Suf*_*ory 1

通过将每个项目与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)