按值从数组中删除项目,但保留该项目的副本

时间:2016-12-29 14:52:38

标签: javascript jquery arrays

我有一个非常简单的数组:

array = [1, 1, 6, 7, 9, 6, 4, 5, 4];

我需要能够删除一个值,但是如果有重复值,我只需要删除一个值。因此,如果我删除值6,则数组应该变为:

array = [1, 1, 7, 9, 6, 4, 5, 4];

一个被删除的顺序无关紧要,所以它可能是最后一个没有。 6或第一个没有。 6.我该怎么做?

修改 我发现有很多关于我为什么需要它的混淆,导致错误的答案。我正在进行数独游戏,当用户在单元格中插入数字时,游戏必须检查所选数字是否已占据同一行或列中的空格。如果是,则将该特定行/列的编号添加到此数组。但是,当用户修复错误时,应删除行/列的编号。但是,用户可以在同一行或列中出现多个错误,这就是我需要在数组中保留重复项的原因。否则,用户可以在行/列中犯多个错误,只修复一个错误,然后代码就会认为不再有任何错误。

希望这会让事情更清楚。

4 个答案:

答案 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));

这应该保留独特的元素,希望如此。