如何通过索引从数组中删除重复的字符串?

问题描述 投票:0回答:5

我有一个颜色名称的数组:

var colors = ["yellow","yellow","yellow","orange","orange","blue","blue","blue","blue];

还有一个带索引的数组:

var indexes = [2, 3];

我想删除索引给出的位置上的颜色名称 - 在本例中是第三个“黄色”和第一个“橙色”。我尝试了这样的循环:

for (var i = colors.length - 1; i >= 0; i--) {
    for (var j = 0; j < indexes.length; j++) {
        if (colors.indexOf(colors[i]) == indexes[l]) {
            colors.splice(k, 1);
        }
    }
}

麻烦的是colors.indexOf(colors [i])为所有重复颜色名称提供相同的值。有没有更好的办法?

javascript arrays string indexing
5个回答
-1
投票

尝试创建一个新数组:

var colors = ["yellow","yellow","yellow","orange","orange","blue","blue","blue","blue"];
var newcolors=[];
colors.forEach(function(item) {
    if(newcolors.indexOf(item)==-1)
    {
        newcolors.push(item);
    }
})
colors = newcolors;

2
投票

您可以使用filterincludes函数

colors = colors.filter((e, i) => !indexes.includes(i));

0
投票
for (var i = indexes.length-1; i >= 0; i--)
   colors.splice(indexes[i], 1);

当然,索引包含增加的元素索引。如果没有,请先排序。

编辑:阅读评论后,我意识到你的意思是你想要删除2,3号位置的所有颜色。要清楚这一点,只删除位置2,3处的元素,只删除那些元素。


0
投票

你可以从最后循环并拼接项目。这减少了阵列的长度。

你不能从头开始循环,因为拼接后的下一个索引是实际的索引。

var colors = ["yellow0", "yellow1", "yellow2", "orange0", "orange1", "blue0", "blue1", "blue2", "blue3"],
    indexes = [2, 3],
    i = indexes.length;
    
while (i--) {
    colors.splice(indexes[i], 1);
}

console.log(colors);

0
投票

我的建议是首先遍历索引数组而不是颜色。这样您就可以先获得要删除的颜色。然后,您可以使用您认为最好的任何方法来删除该颜色的所有实例。在这个例子中,我使用了Array#Filter和一个函数来检查数组中的颜色是否与从索引中获得的颜色相匹配。

也可以使用for循环。

var colors =["yellow","yellow","yellow","orange","orange","blue","blue","blue","blue"]


var indexes = [2, 3];

for(let i = 0; i < indexes.length; i++){
  let color = colors[indexes[i]];
  colors = colors.filter( c=>c!=color )
}

console.log(colors)
© www.soinside.com 2019 - 2024. All rights reserved.