我有一个非常简单的数组:
array = [1, 1, 6, 7, 9, 6, 4, 5, 4];
我需要能够删除一个值,但是如果有重复值,我只需要删除一个值。因此,如果我删除值6
,则数组应该变为:
array = [1, 1, 7, 9, 6, 4, 5, 4];
一个被删除的顺序无关紧要,所以它可能是最后一个没有。 6或第一个没有。 6.我该怎么做?
修改 我发现有很多关于我为什么需要它的混淆,导致错误的答案。我正在进行数独游戏,当用户在单元格中插入数字时,游戏必须检查所选数字是否已占据同一行或列中的空格。如果是,则将该特定行/列的编号添加到此数组。但是,当用户修复错误时,应删除行/列的编号。但是,用户可以在同一行或列中出现多个错误,这就是我需要在数组中保留重复项的原因。否则,用户可以在行/列中犯多个错误,只修复一个错误,然后代码就会认为不再有任何错误。
希望这会让事情更清楚。
答案 0 :(得分:3)
尝试使用indexOf()
获取商品的索引,然后调用splice()
let array = [1, 1, 6, 7, 9, 6, 4, 5, 4];
let index = array.indexOf(6);
array.splice(index,1);
console.log(array);

答案 1 :(得分:3)
您可以使用Array.prototype.findIndex
查找要删除的元素出现的第一个索引,然后拼接。
此外,您可以创建hastable
以确定我们仅在重复可用时删除 - 请参阅下面的演示:
var array = [1, 1, 6, 7, 9, 6, 4, 5, 4];
var hash = array.reduce(function(p,c){
p[c] = (p[c] || 0) + 1;
return p;
},{});
function remove(el) {
if(hash[el] < 2)
return;
array.splice(array.findIndex(function(e) {
return e == el;
}), 1);
}
remove(6);
remove(7);
console.log(array);
答案 2 :(得分:2)
var array=[1, 1, 6, 7, 9, 6, 4, 5, 4],
removeFirst=function(val,array){
array.splice(array.indexOf(val),1)
return array;
};
console.log(removeFirst(6,array));
答案 3 :(得分:1)
如果删除的元素(不是元素!)的顺序不重要,您可以使用以下内容:
array = [1, 1, 6, 7, 9, 6, 4, 5, 4];
function remove_if_dupe(elem, array) {
dupes=[];
for(i=0;i<array.length;i++) {
if(array[i] === elem) {
dupes.push(elem);
}
}
if(dupes.length>1) {
//is duplicated
array.splice(array.indexOf(elem), 1);
}
return array;
}
console.log(remove_if_dupe(6,array));
这应该保留独特的元素,希望如此。