Array.push()和唯一项

时间:2016-04-19 13:10:58

标签: javascript

我有一个将唯一值推送到数组的简单情况。它看起来像这样:

contains()

看起来挺直截了当,对吧?不,看起来如此。它不会添加任何值。我确信这是我身上的某种愚蠢的错误,但我似乎无法找到它。

12 个答案:

答案 0 :(得分:44)

是的小错误

if(this.items.indexOf(item) === -1) {
      this.items.push(item);
      console.log(this.items);
    }

答案 1 :(得分:13)

您可以使用ES6中的Set结构来使代码更快,更易读:

// Create Set
this.items = new Set();

add(item) {
    this.items.add(item);

    // Set to array
    console.log([...this.items]);
}

答案 2 :(得分:6)

我猜ES6已经设置了数据结构,您可以将其用于唯一条目

答案 3 :(得分:3)

你的逻辑是说,“如果这个项目已经存在,那就添加它。”它应该是相反的。

将其更改为...

if (this.items.indexOf(item) == -1) {
    this.items.push(item);
}

答案 4 :(得分:2)

你必须使用== -1,如果等于-1,你的数组中不包含doest

  this.items = [];

  add(item) {
    if(this.items.indexOf(item) == -1) {
      this.items.push(item);
      console.log(this.items);
    }
  }

答案 5 :(得分:2)

尝试.includes()

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true

类似

const array = [1, 3];
if (!array.includes(2))
    array.push(2);

但是,请注意页面底部的浏览器兼容性。

答案 6 :(得分:2)

在数组中始终推送唯一值

ab = [
     {"id":"1","val":"value1"},
     {"id":"2","val":"value2"},
     {"id":"3","val":"value3"}
   ];



var clickId = [];
var list = JSON.parse(ab);
$.each(list, function(index, value){
    if(clickId.indexOf(value.id) < 0){
        clickId.push(value.id);
    }
});

答案 7 :(得分:1)

使用Set

Counter

答案 8 :(得分:1)

如果您要寻找一支班轮

对于图元

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

对于对象

this.items.indexOf(item) === -1) && this.items.push(item);

答案 9 :(得分:0)

因此不确定这是否能回答您的问题,但索引如果您要添加的项目仍然返回-1。不熟悉js但看起来这些项目是因为它们还没有在数组中。我为你做了一个小修改代码的jsfiddle。

this.items = [];

add(1);
add(2);
add(3);

document.write("added items to array");
document.write("<br>");
function  add(item) {
        //document.write(this.items.indexOf(item));
    if(this.items.indexOf(item) <= -1) {

      this.items.push(item);
      //document.write("Hello World!");
    }
}

document.write("array is : " + this.items);

https://jsfiddle.net/jmpalmisano/Lnommkbw/2/

答案 10 :(得分:0)

如果使用 Lodash ,请查看_.union函数:

let items = [];
items = _.union([item], items)

答案 11 :(得分:0)

var helper = {};
for(var i = 0; i < data.length; i++){
  helper[data[i]] = 1; // Fill object
}
var result = Object.keys(helper); // Unique items