Не понимаю почему не работает for правильно? Здравствуйте ! Написал цикл , который должен сортировать массив с анаграммами и оставлять только уникальные элементы , но проблема в том что , когда я ставлю на запись в другой массив (sarr) одно значение он записывает а если с другого то нет , в данном случае выведет только 3 значения как и положеноvar arr = ["воз", "ЗОВ", "корсет", "киборг","киборг", "гробик", "костер", "сектор"]; var arr2=[]; /*function sort(a,b){ return a-b; }*/ function clear (arr){ var arr3=[]; for(var i = 0 ; iarr3.push(arr[i].toLowerCase().split('')); arr3[i].sort(); arr2.push(arr3[i].join('')); } var sarr=[]; /* сюда должны записываться уникальные элементы , уже отсортированные */
next: for(var i = 0 ; i for(var j = 0 ;j if(arr2[i]==sarr[j]) continue next;
} sarr.push(arr2[i]); /*если здесь будет записано данное значение то он выведет 3 элемента но отсортированных в алфавитном порядке */ } console.log(sarr); } clear(arr); console.log(arr);["взо", "екорст", "бгикор"] а в вот этом нет var arr = ["воз", "ЗОВ", "корсет", "киборг","киборг", "гробик", "костер", "сектор"]; var arr2=[]; /*function sort(a,b){ return a-b; }*/ function clear (arr){ var arr3=[]; for(var i = 0 ; iarr3.push(arr[i].toLowerCase().split('')); arr3[i].sort(); arr2.push(arr3[i].join('')); } var sarr=[]; /* сюда должны записываться уникальные элементы , уже отсортированные */
next: for(var i = 0 ; i for(var j = 0 ;j if(arr2[i]==sarr[j]) continue next;
} sarr.push(arr[i]); /*если здесь будет записано данное значение то он выведет все 8 элементов несмотря на continur next*/ } console.log(sarr); } clear(arr); console.log(arr);["воз", "ЗОВ", "корсет", "киборг", "киборг", "гробик", "костер", "сектор"] вроде бы когда выполняется continue next цикл не должен в принципе переходить туда , но этого не происходит . Пожалуйста объясните почему происходит так (интересно почему а не только решение ), и направьте на правильный путь , могу решить задачу другим методом но мне конкретно интересно почему происходит именно так , так как обучаюсь и хочу понять , чтобы в будущем не наткнуться на что то аналогичное . Заранее спасибо !!!!
Проблема здесь связана с тем, что вы используете метод continue с меткой next, который должен пропустить одну итерацию внешнего цикла. Однако, когда вы делаете continue next;, это приводит к переходу к следующей итерации внешнего цикла (for(var i...)), но при этом переменная i все равно увеличивается на 1, так как условие цикла не выполняется.
Это происходит потому, что в JavaScript оператор continue всегда пропускает только одну итерацию ближайшего цикла, но в вашем случае условие цикла for(var i...)) всё равно выполнится и переменная i увеличится на 1.
Чтобы исправить это, вам нужно изменить ваш подход к проверке на уникальность элементов. Можно создать объект, где ключами будут отсортированные строки, а значениями - сами строки. При проходе цикла добавлять значение в объект как ключ, и затем получить уникальные элементы из ключей объекта.
Надеюсь, это объяснение поможет вам понять, почему ваш код не работает как ожидается. Если у вас остаются вопросы, пожалуйста, дайте знать.
Проблема здесь связана с тем, что вы используете метод continue с меткой next, который должен пропустить одну итерацию внешнего цикла. Однако, когда вы делаете continue next;, это приводит к переходу к следующей итерации внешнего цикла (for(var i...)), но при этом переменная i все равно увеличивается на 1, так как условие цикла не выполняется.
Это происходит потому, что в JavaScript оператор continue всегда пропускает только одну итерацию ближайшего цикла, но в вашем случае условие цикла for(var i...)) всё равно выполнится и переменная i увеличится на 1.
Чтобы исправить это, вам нужно изменить ваш подход к проверке на уникальность элементов. Можно создать объект, где ключами будут отсортированные строки, а значениями - сами строки. При проходе цикла добавлять значение в объект как ключ, и затем получить уникальные элементы из ключей объекта.
Надеюсь, это объяснение поможет вам понять, почему ваш код не работает как ожидается. Если у вас остаются вопросы, пожалуйста, дайте знать.