2016-04-19 2 views
2

У меня есть простой случай нажатия уникальных значений в массив. Это выглядит так:Array.push() и уникальные элементы

this.items = []; 

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

Кажется довольно прямолинейным, верно? Нет, как кажется. Он не добавляет никаких значений. Я уверен, что это какая-то глупая ошибка на моей стороне, но я не могу ее найти.

ответ

7

Да его маленькая ошибка

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

Ха-ха, я не знаю, о чем я думал! Благодаря! –

2

Вы должны использовать == -1, если это равно -1 не творишь содержится в массиве

this.items = []; 

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

Ваша логика говорит: «если этот элемент уже существует, а затем добавьте его ». Это должно быть наоборот.

Изменить его ...

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

поэтому не уверен, если это отвечает на ваш вопрос, но IndexOf элементы, которые вы добавляете снова возвращаются -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/

1

Я думаю ES6 установил структуру данных, которую можно использовать для уникальных записей

+0

'Set()' да, но мне нужен массив. –

+0

Набор также представляет собой массив, хранящий последовательные данные, но только уникальный, не дублирующий. – dearvivekkumar

Смежные вопросы