Не так вы представляете циклы... оно просто берет и кругами выполняет то, что написано внутри.
var numbers = [1, 4, 5, 9, 2, 5, 1];
for (var i = 0; i < numbers.length; i++) {
for (var j = 0; j < numbers.length && j != i; j++) {
if (numbers[i] != numbers[j]) {
console.log(numbers[i]);
}
}
}
Запускается код для i = 0;
Внутри которого начинается новый цикл, который кругами выводит числа в консоль и не срабатывает только на j == i, т. е. 0.
numbers[i] внутри этого цикла пока всегда будет == 1
А оставшиеся элементы массива выведутся по очереди: 4, 5, 9, 2, 5
Не выводится только последняя единичка, т. к. numbers[j] == numbers[i] == 1
Запускается следующий круг для i = 1.
И очереднй цикл j - от нуля до .length и т. д... оттуда и дофига результатов.
Цикл можно прервать через ключевое слово break; но он тут не поможет.
______________
Можно решить так -
https://jsfiddle.net/OPTlMUS/1pkcdqxs/ , из массива собрать строку и через регулярку проверить - сколько раз в нем попадается очередной эелемнт. А если совпадение всего одно - уникальный элемент, добавить в новый массив.
var numbers = [1, 4, 5, 9, 2, 5, 1];
for (var i = 0; i <= numbers.length - 1; i++) {
for (var j = 0; j <= numbers.length - 1 && j != i; j++) {
if (numbers[i] != numbers[j]) {
console.log(numbers[i]);
}
}
}
Я ожидаю, что первый цикл будет по очереди сравнивать числа (i) с числами (j) из второго цикла. И я рассчитывал на 7 итераций:
1) i = 0 | j = 1; j = 2; j = 3; j = 4; j = 5; j = 6 | - в консоль не выведется
2) i = 1 | j = 0; j = 2; j = 3; j = 4; j = 5; j = 6 | - console.log(4)
3) i = 2 | j = 0; j = 1; j = 3; j = 4; j = 5; j = 6 | - в консоль не выведется
4) i = 3 | j = 0; j = 1; j = 2; j = 4; j = 5; j = 6 | - console.log(9)
5) i = 4 | j = 0; j = 1; j = 2; j = 3; j = 5; j = 6 | - console.log(2)
6) i = 5 | j = 0; j = 1; j = 2; j = 3; j = 4; j = 6 | - в консоль не выведется
7) i = 6 | j = 0; j = 1; j = 2; j = 3; j = 4; j = 5 | - в консоль не выведется
Но вместо этого получается другой результат (на скриншоте). Помогите, пожалуйста, мне разобраться, что здесь не так (если возможно, то как можно проще).