获取数组中没有double值的元素

时间:2016-06-14 07:58:01

标签: javascript arrays

我有一个问题。你如何检索数组中没有double值的元素?例如:[1,1,2,2,3,4,4,5]然后你只检索[3,5]。 提前致谢

for (var j = 0; j < newArr.length; j++) {
  if ((arr1.indexOf(newArr[j]) === 0) && (arr2.indexOf(newArr[j]) === 0)) {
    index = newArr.indexOf(j); newArr.splice(index, 1);
  }
}

7 个答案:

答案 0 :(得分:6)

如果数组中的项是唯一的,则从开头找到的索引应该等于从末尾找到的索引,换句话说:

example.herokuapp.com/log_in

答案 1 :(得分:0)

创建新数组tmp,并按indexOf检查已存在的值。如果splice函数已存在删除..

var arr = [1,1,2,2,3,4,4,5];
var tmp = [];
var dup = [];
    for(var i = 0; i < arr.length; i++){
        var ind = tmp.indexOf(arr[i]);
        if(ind == -1){
         if(dup.indexOf(arr[i]) == -1){
               tmp.push(arr[i]);
           }
        }
        else{
        tmp.splice(ind,1);
        dup.push(arr[i]);
        }
    }
    console.log(tmp);

答案 2 :(得分:0)

针对未分类数组的解决方案,其中包含项目的哈希表。复杂度 O(2n)

var array = [1, 1, 2, 2, 3, 4, 4, 5, 1],
    hash = Object.create(null),
    single;

array.forEach(function (a, i) {
     hash[a] = a in hash ? -1 : i;
});

single = array.filter(function (a, i) {
    return hash[a] === i;
});

console.log(single);

答案 3 :(得分:0)

抱歉,我的第一篇文章是演示文稿! 您必须将数组的每个元素与其他元素进行比较,以获得每个元素的出现次数

    var tab = [1,1,2,2,3,4,4,5] //The array to analyze
    tab = tab.sort(); // we sort the array
    show(tab); // we display the array to the console (F12 to open it)

    var uniqueElementTab = []; // this array will contain all single occurence

    var sameElementCounter = 0;
    for(x=0;x<tab.length;x++){ // for all element in the array
        sameElementCounter = 0;
        for(y=0;y<tab.length;y++){ // we compare it to the others
            if((tab[x]==tab[y])){
                sameElementCounter+=1; // +1 each time we meet the element elsewhere 
            }
        }
        if(sameElementCounter<=1){
            uniqueElementTab.push(tab[x]); //if the element is unique we add it to a new array
        }
    }
    show(uniqueElementTab); // display result

    function show(tab) { // Simple function to display the content of an array
        var st="";
        for(i=0;i<tab.length;i++){
            st += tab[i]+" ";
        }
        console.log(st+"\n");
    }

希望它有所帮助。

答案 4 :(得分:0)

以下是使用Array.sortArray.joinArray.mapString.replaceString.split函数的简单“棘手”解决方案:

var arr = [1, 1, 2, 2, 3, 4, 4, 5];
arr.sort();
var unique = arr.join("").replace(/(\d)\1+/g, "").split("").map(Number);

console.log(unique);  // [3, 5]

答案 5 :(得分:0)

这将是我完成这项工作的方式。

var arr = [1,1,2,2,3,4,4,5],
uniques = Object.keys(arr.reduce((p,c) => (c in p ? Object.defineProperty(p, c, {enumerable : false,
                                                                                   writable : true,
                                                                               configurable : true})
                                                  : p[c] = c,
                                           p), {}));
console.log(uniques);

答案 6 :(得分:0)

如果数组已排序,您可以在O(n)中解决此问题(请参阅下面的“pushUniqueSinglePass”):

Array

这比使用地图或排序(计时!)更有效率。在我的机器中,一个1M排序的数组可以在18毫秒内找到它的独特元素;而使用集合的版本需要多10倍。