返回在数组中没有重复项的唯一元素

时间:2015-12-28 18:20:37

标签: javascript arrays

我正在尝试返回一个数组,其中只包含没有特定顺序的数组中没有重复项的唯一元素。

[1,2,3,3,3,4,4,2]会返回1

["hello", "truck", 2, "truck", 2, "truck"]会返回"hello"

到目前为止,我只能使用filter()函数返回唯一元素,但我不知道该去哪里。

基本上如果有重复项,我希望从数组中删除这两个值。

这听起来很简单,但我有严重的心理打嗝。

以下是我的代码:

function diff(arr1, arr2) {
  var newArr = [];

   newArr = arr1.concat(arr2);

   newArr = newArr.filter(function(elem, index, self) {
        return index == self.indexOf(elem);
    });

    console.log(newArr);
    return newArr;

}

diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);
//should return 4

3 个答案:

答案 0 :(得分:6)

比较indexOflastIndexOf,如果它们相等则元素没有重复。使用.filter这个逻辑。



function diff(arr1, arr2) {
  return arr1.concat(arr2).filter(function(elem, index, self) {
    return self.indexOf(elem)==self.lastIndexOf(elem);
  });
}

alert(diff([1, 2, 3, 5], [1, 2, 3, 4, 5]));




答案 1 :(得分:1)

你可以这样做:

function findUniques(arr) {
    var i = 0;
    while(i !== arr.length) {
        if(arr.slice(i+1,arr.length-1).indexOf(arr[i]) > -1) {
            arr = arr.splice(i,0);
        } else {
            i++;
        }
    }
}

这会使数组中的唯一项与它们的查找顺序相反。为避免这种情况,如果您关心订单,则从数组末尾进行迭代,让我减少到零。

答案 2 :(得分:-1)

要仅获取数组中的唯一项,您可以使用filter方法,如下所示:

function unique(val, index, self) { 
    return index === self.indexOf(val);
}

您可以像这样使用它:

var arr = ['1','2','3','3'];
var uniqueArr = arr.filter(unique); // will return ['1', '2', '3']

没有jQuery或prototype.js&对于具有混合类型值的数组。