#javascript #arrays #loops #iteration
Вопрос:
Я пытаюсь создать фрагмент кода, содержащий 2 массива, один с названиями фруктов, другой с человеческими именами, при запуске я хочу, чтобы он проходил через каждый фрукт и каждое имя, например: «Привет, меня зовут x, и мне нравится фрукт x».
Когда я впервые написал код, я мог заставить его произнести одно имя, но без фруктов, и у меня не было i
приращения, поэтому он не проходил через набор имен, только первое значение. Это код до сих пор
var fruitNames = ["Banana","Apple","Watermelon","Kiwi Fruit"];
var peopleNames = ["Nathan","Allie","Chris","Charlie"];
var i =0;
while (i < fruitNames.length < peopleNames.length) {
alert("Hello my name is ") (peopleNames[0]) ("and I like the fruit ") (fruitNames[0]);
i
}
Комментарии:
1.
i
является индексом массива, поэтому вам нужно использовать его при выборе массива:peopleNames[i]
иfruitNames[i]
. И просто используйте длину одного массива в вашем состоянииi < fruitNames.length
.2. В общем, вы должны убедиться, что длины массивов равны. Но вы можете проверить две длины с помощью логического оператора и:
(i < fruitNames.length amp;amp; i < peopleNames.length)
, а затем использоватьi
в качестве индекса вместо0
.
Ответ №1:
Вот один из способов. Вы действительно заботитесь только о количестве людей, пока есть достаточно фруктов.
let fruitNames = ["Banana", "Apple", "Watermelon", "Kiwi Fruit"];
let peopleNames = ["Nathan", "Allie", "Chris", "Charlie"];
peopleNames.forEach((people, index) => {
if (!fruitNames[index]) return;
alert(`Hello my name is ${people} and I like ${fruitNames[index]}`);
});
Ответ №2:
Другое решение-использовать for-loop
как:
var fruitNames = ["Banana", "Apple", "Watermelon", "Kiwi Fruit"];
var peopleNames = ["Nathan", "Allie", "Chris", "Charlie"];
for (let i = 0; i < fruitNames.length; i ) {
console.log('Hello my name is ' peopleNames[i] ' and i like the fruit ' fruitNames[i]);
}
Или forEach
как:
var fruitNames = ["Banana", "Apple", "Watermelon", "Kiwi Fruit"];
var peopleNames = ["Nathan", "Allie", "Chris", "Charlie"];
peopleNames.forEach((value,index) =>{
console.log('Hello my name is ' value ' and i like the fruit ' fruitNames[index]);
});
Ответ №3:
Три проблемы с вашим кодом.
Во-первых, alert
отображается только то, что указано в скобках, поэтому создайте переменную для хранения сообщения, которое вы хотите сохранить, а затем поместите все сообщение в скобки.
Во-вторых, чтобы отобразить определенное значение в массиве, поместите индекс i
в квадратные скобки.
while(cond){
var msg = 'Hello my name is ' peopleNames[i] ' and I like the fruit ' fruitNames[i];
alert(msg);
i ;
}
В-третьих, я не знаю, чего вы пытаетесь достичь с помощью этого условия (i < fruitNames.length < peopleNames.length)
, но это недопустимый javascript. Если вы хотите перейти к тому, что длиннее , ваше условие может быть while(i < Math.max(fruitNames.length, peopleNames.length))
таким, это даст undefined
результат при попытке получить доступ к несуществующим значениям в более коротком массиве. Если вы хотите перейти к тому, что короче , ваше условие может быть while(i < Math.min(fruitNames.length, peopleNames.length))
, это не покажет некоторые значения в более длинном массиве.
С учетом этих изменений ваш код будет выглядеть следующим образом:
var fruitNames = ["Banana","Apple","Watermelon","Kiwi Fruit"];
var peopleNames = ["Nathan","Allie","Chris","Charlie"];
var i = 0;
while (i < Math.min(fruitNames.length, peopleNames.length)) {
var msg = 'Hello my name is ' peopleNames[i] ' and I like the fruit ' fruitNames[i];
alert(msg);
i ;
}
Ответ №4:
Вот очень короткая версия. Он выполняет обратный отсчет длины массива, что означает, что мы запускаем массивы в .reverse()
let f = ["Banana", "Apple", "Watermelon", "Kiwi Fruit"].reverse(), p = ["Nathan", "Allie", "Chris", "Charlie"].reverse(), pl = p.length
while (pl-- > 0) console.log(`Hello my name is ${p[pl]} and I like ${f[pl]}`);
// OR change `console.log` --> `alert`