Ik heb een simpel geval van het pushen van unieke waarden in een array. Het ziet er zo uit:
this.items = [];
add(item) {
if(this.items.indexOf(item) > -1) {
this.items.push(item);
console.log(this.items);
}
}
Lijkt vrij eenvoudig, toch? Nee, zoals het lijkt. Het voegt geen waarden toe. Ik weet zeker dat het een domme fout van mijn kant is, maar ik kan het niet vinden.
Antwoord 1, autoriteit 100%
Ja, het is een klein foutje.
if(this.items.indexOf(item) === -1) {
this.items.push(item);
console.log(this.items);
}
Antwoord 2, autoriteit 51%
U kunt de Set-structuur van ES6 gebruiken om uw code sneller en beter leesbaar te maken:
// Create Set
this.items = new Set();
add(item) {
this.items.add(item);
// Set to array
console.log([...this.items]);
}
Antwoord 3, autoriteit 11%
probeer .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
dus zoiets als
const array = [1, 3];
if (!array.includes(2))
array.push(2);
let echter op de browsercompatibiliteit onderaan de pagina.
Antwoord 4, autoriteit 6%
Als je Lodashgebruikt, kijk dan eens op _.union
functie:
let items = [];
items = _.union([item], items)
Antwoord 5, autoriteit 6%
In het geval dat u op zoek bent naar één voering
Voor primitieven
(this.items.indexOf(item) === -1) && this.items.push(item);
Voor objecten
this.items.findIndex((item: ItemType) => item.var === checkValue) === -1 && this.items.push(item);
Antwoord 6, autoriteit 5%
Je logica zegt: “Als dit item al bestaat, voeg het dan toe.” Het zou het tegenovergestelde moeten zijn.
Wijzig het in…
if (this.items.indexOf(item) == -1) {
this.items.push(item);
}
Antwoord 7, autoriteit 5%
Ik denk dat ES6 een datastructuur heeft ingesteld, die je kunt gebruiken voor unieke items
Antwoord 8, autoriteit 4%
gebruiken
this.items = new Set();
this.items.add(1);
this.items.add(2);
this.items.add(1);
this.items.add(2);
console.log(Array.from(this.items)); // [1, 2]
Antwoord 9, autoriteit 2%
Je moet === -1 gebruiken, als het gelijk is aan -1, d.w.z. item is niet beschikbaar in je array:
this.items = [];
add(item) {
if(this.items.indexOf(item) === -1) {
this.items.push(item);
console.log(this.items);
}
}
Antwoord 10
Duw altijd unieke waarde in array
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);
}
});
Antwoord 11
var helper = {};
for(var i = 0; i < data.length; i++){
helper[data[i]] = 1; // Fill object
}
var result = Object.keys(helper); // Unique items
Antwoord 12
dus ik weet niet zeker of dit je vraag beantwoordt, maar de index van de items die je toevoegt, blijft -1 retourneren. Niet bekend met js, maar het lijkt erop dat de items dat doen omdat ze nog niet in de array staan. Ik heb een jsfiddle van een beetje aangepaste code voor je gemaakt.
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);