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

时间:2017-12-22 20:29:01

标签: javascript arrays string indexing

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

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])为所有重复颜色名称提供相同的值。还有更好的方法吗?

5 个答案:

答案 0 :(得分:2)

您可以使用filterincludes功能

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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);

答案 3 :(得分: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)

答案 4 :(得分:-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;