【问题标题】:Trying to iterate through two collections试图遍历两个集合
【发布时间】:2021-09-06 16:57:09
【问题描述】:

我正在尝试创建一个包含 2 个数组的代码 sn-p,一个带有水果名称,一个带有人名,运行时,我希望它遍历每个水果和每个名称,例如“你好,我的名字是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++

}

【问题讨论】:

  • i 是数组的索引,因此您需要在数组选择中使用它:peopleNames[i]fruitNames[i]。并且只需在您的条件下使用一个数组的长度i &lt; fruitNames.length
  • 一般来说,您应该确保数组的长度相等。但是你可以通过使用逻辑和运算符来检查两个长度:(i &lt; fruitNames.length &amp;&amp; i &lt; peopleNames.length),然后使用i 作为索引而不是0

标签: javascript arrays loops iteration


【解决方案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 like:

    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 &lt; fruitNames.length &lt; peopleNames.length) 条件实现什么,但这不是有效的javascript。如果您想循环到更长的那个,您的条件可能是while(i &lt; Math.max(fruitNames.length, peopleNames.length)),当您尝试访问较短数组中不存在的值时,这将给出undefined。如果你想循环到较短的那个,你的条件可以是while(i &lt; 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`

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-10
          • 1970-01-01
          • 2014-04-11
          • 2021-11-27
          • 2018-02-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多