我有一个颜色名称的数组:
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])为所有重复颜色名称提供相同的值。还有更好的方法吗?
答案 0 :(得分:2)
答案 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;