#javascript #arrays #loops #for-loop #nested-loops
Вопрос:
let conditon = false
const test = [2, 0, 3, 4, 5, 6, 7]
for (let i = 0; i < 10; i ) {
for (let j = 0; j < test.length; j ) {
if (0 !== test[j]) {
conditon = true;
break;
}else{
conditon = false;
break;
}
}
console.log(conditon)
}
В этом цикле это консоль.регистрируйте значение true, но оно должно выводить значение false, когда оно находит 0 в массиве
Комментарии:
1. вы никогда не возвращаете условию значение false, когда оно обнаруживает, что первое условие, отличное от 0, всегда будет истинным, попробуйте вернуть условию значение false перед оператором if
2.
for (let j = 0; j < test.length; j ) { console.log(0 !== test[j]) }
3. не сработало сэр codepen.io/ranjan-raj-shrestha/pen/gOLNQzr?editors=1111
4. Вы все еще тестируете только последний элемент! Все, что было раньше, будет перезаписано, потому что вы не изменили это предложенным способом
5. Что нужно сделать, если я хочу получить результат
Ответ №1:
Вы постоянно устанавливаете condition
значение true, потому что, например 0 !== 2
, значение равно true. Это относится ко всем элементам, кроме 0. 0 !== 0
значение которого равно false. Вам нужно поставить там отметку » еще «и установить condition
значение «ложь», затем отключиться, чтобы оно не продолжалось, и снова переопределить ваше значение condition
, установив значение «истина» для следующих итераций.
let condition = false;
const test = [2, 0, 3, 4, 5, 6, 7]
for (let i = 0; i < 10; i ) {
for (let j = 0; j < test.length; j ) {
if (0 !== test[j]) {
conditon = true;
} else {
conditon = false;
break;
}
}
console.log(conditon)
// Comment this part out if you want it to continue looping without immediately stopping.
// Otherwise the loop ends once it hits 0.
if(!condition)
break;
}
Имейте в виду, что это не лучший способ сделать это… Я просто даю вам пример того, почему ваш код работает именно так.
Ответ №2:
Вот упрощенная версия, которую вы можете изучить, чтобы понять, как она работает, и которую при желании можно использовать в качестве шаблона для более сложной версии.
let condition;
const nums = [2, 0, 3, 4, 5, 6, 7];
for(let i = 0; i < 2; i ){
for (let num of nums) {
condition = (num !== 0);
console.log(num, condition);
}
console.log("n--end of outer loop--nn");
}
Изменить:
Из вашего комментария я понял, что после каждого прохождения внешнего цикла вы хотите сообщать, было ли какое-либо значение в массиве равно нулю. Если это то, что вы ищете, вы бы сделали что-то вроде этого:
const nums = [2, 0, 3, 4, 5, 6, 7];
for(let i = 0; i < 2; i ){
let noZerosFound = true;
console.log("checking: " nums);
for (let num of nums) {
if(num === 0){
noZerosFound = false;
// Can include a `break` statement here for better performance
}
}
console.log("noZerosFound: " noZerosFound);
console.log("n");
}
И массивы JavaScript также предоставляют некоторые полезные встроенные методы для такого рода ситуаций. Так что, если вы хотите, вы могли бы просто сделать:
const nums = [2, 0, 3, 4, 5, 6, 7];
for(let i = 0; i < 2; i ){
console.log("checking: " nums);
// Applies the function `(num) => num !== 0` to each element of `nums`.
// If the result is true for every element, returns true.
// Otherwise, returns false.
const noZerosFound = nums.every( (num) => num !== 0);
console.log("noZerosFound: " noZerosFound);
console.log("n");
}
.every
Дополнительные пояснения см. в разделе Функции метода и стрелок в MDN.
Комментарии:
1. Я сделал этот внутренний цикл, но я хочу получить тот же результат за пределами внутреннего цикла, какой метод я должен использовать, потому что я работаю в небольшом проекте, где мне нужен конечный результат внутреннего цикла и отправляю условие во внешний цикл по завершении каждой итерации внешнего цикла
2. Вы можете просто регистрировать значение
condition
after каждый раз через внешний цикл (вместо регистрации «конца внешнего цикла») — но имейте в виду, что значение всегда будетtrue
к этому моменту, потому что условие проверяется для каждого значения во внутреннем цикле (включая последнее значение7
, которое, очевидно, не равно нулю).3. Вы пытаетесь сохранить его на
false
том уровне, если он найдет ноль где-нибудь во внутреннем цикле?
Ответ №3:
Здесь уже есть хорошие ответы. Позвольте мне представить этот способ в качестве дополнительного ответа.
const test = [2, 0, 3, 4, 5, 6, 7];
console.log(!test.includes(0));
const test2 = [2, 1, 3, 4, 5, 6, 7];
console.log(!test2.includes(0));
.включает в себя()
array.includes(<value>)
.includes()
возвращаетtrue
, если заданное значение находится в массиве,false
если нет.!test.includes(0)
возвращаетсяtrue
, если0
его НЕТ внутриtest
.false
если0
естьtest
.