Как уже говорили другие, внутренний цикл никогда не запускается, потому что exhaustive
пусто.Но даже если он запустится, ваш код не будет работать правильно, потому что вы будете вызывать exhaustive.push()
для каждого элемента в exhaustive
, который отличается от render[i]
, но вы должны нажимать его только один раз.
Вам нужно нажать после цикла, если цикл не нашел совпадения.
var render = ["Element1", "Element2", "Element1", "Element1", "Element1"]
var exhaustive = []
for (var i = 0; i < render.length; i++) {
var found = false;
for (var j = 0; j < exhaustive.length; j++) {
if (exhaustive[j] === render[i]) {
found = true;
break;
}
}
if (!found) {
exhaustive.push(render[i]);
}
}
console.log(exhaustive) // Expected result ["Element1","Element2"]
Вы также можете использовать встроенный метод indexOf()
, чтобы проверить, находится ли значение уже в массиве.
var render = ["Element1", "Element2", "Element1", "Element1", "Element1"]
var exhaustive = []
for (var i = 0; i < render.length; i++) {
if (exhaustive.indexOf(render[i]) == -1) {
exhaustive.push(render[i]);
}
}
console.log(exhaustive) // Expected result ["Element1","Element2"]
Еще одна вещь: используйте if (x !== y)
для проверки, если две вещи не равны, не if (!x === y)