如何从数组中删除所有相同的元素?

时间:2017-02-17 00:28:33

标签: javascript arrays

如何从数组中删除所有相同的元素 例如,我有 var arr = [1,1,1,2,3,4,5,6,7]; 我需要得到像这样的数组 [2,3,4,5,6,7]; 我'使用这个

var chotch = 0;
for(var i = 0; i < text1_arr.length; i++) {
    if(word1_reg.test(text1_arr[i])) {
       text1_arr.splice(i, 1);
       chotch++;
       if(needCount === chotch) {
          break;
       }
     } else {
        continue;
     }
 }

4 个答案:

答案 0 :(得分:1)

以下代码返回数组只发生 一次的元素。

ES6 解决方案。

&#13;
&#13;
var arr = [1,1,1,2,2,3,4,5];

(function cleanIt(arr) {
  var arr2 = arr.filter((v, i) => arr.indexOf(v) != i);
  var newArr = arr.filter(v => !arr2.includes(v));
  
  console.log(newArr);
  console.log(`Elements deleted: ${arr.length-newArr.length}`);
})(arr);
&#13;
&#13;
&#13;

ES5 解决方案。 注意Array#includes是ES6功能。

&#13;
&#13;
var arr = [1,1,1,2,2,3,4,5];

(function cleanIt(arr) {
  var arr2 = arr.filter(function(v,i) {
    return arr.indexOf(v) != i;
  });
  var newArr = arr.filter(function(v) {
    return !arr2.includes(v);
  });

  console.log(newArr);
  console.log('Elements deleted: ' + (arr.length - newArr.length));
})(arr);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

function removeDuplicates(input){
  var out = [];
  var duplicates = [];
  input.forEach(function(item){
    if(duplicates.indexOf(item)!==-1)return;
    var outIndex = out.indexOf(item)
    if(outIndex!==-1){
      out.splice(outIndex,1)
      duplicates.push(item);
      return;
    }
    out.push(item)
  });
  return out;
}
removeDuplicates([1,1,1,2,3,4,5,6,7]) // [2, 3, 4, 5, 6, 7]

答案 2 :(得分:0)

您可以使用indexOflastIndexOf对您的数组进行迭代,并检查其仅存在的每个项目。如果是,则将其添加到结果数组中。

var arr = [1,1,1,2,3,4,5,6,7];

var result = [];
for (var i = 0; i < arr.length; i++) {
   if (arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])) {
       result.push(arr[i]);
   }
}

答案 3 :(得分:0)

此策略消除了可以找到2次的任何元素。

const arr = [1,1,1,2,3,4,5,6,7];
const uniqs = a => a.filter(e => a.slice(a.indexOf(e) + 1).indexOf(e) === -1);
console.log(uniqs(arr));