在数组数组中查找项目

时间:2016-08-10 07:11:06

标签: node.js

我有一个场景,我希望在数组数组中找到一个项目,然后如果包含删除该项目。

a = [ [ 'Brian', 80 ],
  [ 'Sue', 72 ],
  [ 'Mary', 18 ],
  [ 'Harry', 60 ],
  [ 'Brian', 40 ] ];

我最初想过使用indexOf查找项目然后拼接删除它但是不能使用indexOf,因为我只知道元素[0]的值而不是元素[1],例如我知道"哈利"但不是他的年龄:

index = a.indexOf(["Harry", ?])
a.splice(index, 1);

另一种情况我可以更新值并在不存在的情况下创建它。

修改 新的aync编程然而只是意识到在异步环境中,数组元素可能会在处理数组时被更改,因此当我稍后删除项目一个或两个命令时,索引项目编号X可能不再是x ...

2 个答案:

答案 0 :(得分:0)

取决于您是否要返回新阵列或修改原始阵列。

如果您想要返回没有匹配元素的,可以使用Array.prototype.filter

// Reverse order because the array is re-indexed on splice
for (var i = a.length - 1; i >= 0; i--)
  if (a[i] === 'Harry') a.splice(i, 1);

要添加新元素并返回数组,您还可以使用Array.prototype.concat

但是,如果您要删除/插入/替换原始数组中的元素,正确的方法是使用Array.prototype.splice或更快的Array.prototype.push添加新项目到最后:

 "UuoaI" = magicOperation("Üüöäİ");

顺便说一句,请考虑使用lodashunderscorejs等帮助程序库以安全的方式操作数组。

答案 1 :(得分:-2)

您可以从列表中剪切项目

    a.forEach(function(x){
        if((x.indexOf("Brian")) === 0) a.splice([a.indexOf(x)],1)
    });