【问题标题】:access array number 2 and 3 to be in one string array将数组 2 和 3 访问到一个字符串数组中
【发布时间】:2019-04-02 05:08:44
【问题描述】:

如何输出:

ID: 0001
Name: Mike
Birthday: London 21/05/1989
Hobby: Reading

我下面的代码是未定义的,我希望数组城市+日期在生日时在一起。

我的代码不是,请检查下面的代码:

var input = [
                ["0001", "Mike", "London", "21/05/1989", "Reading"],
                ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
                ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
                ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
            ];

var data = ["ID: ", "Name: ", "Birthday: ", "Hobby: "];




for(var i = 0 ; i <= input.length ; i++){
  for(var j = 0  ; j <= input.length ; j++){
  for(var i = 0 ; i <= data.length; i++){
  console.log(data[i] + input[j][i])
    };
  };
};

有什么建议可以解决这个逻辑吗?为此,我只想使用循环。

【问题讨论】:

  • 顶部的示例输出,@Rai

标签: javascript arrays loops for-loop nested-loops


【解决方案1】:

您可以使用array.map

var input = [
                ["0001", "Mike", "London", "21/05/1989", "Reading"],
                ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
                ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
                ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
            ];
            
var expectedOutput = input.map(a=>{
 return {ID:a[0],Name:a[1],Birthday:a[2] + ' ' + a[3],Hobby:a[4]}
})

console.log('string output',JSON.stringify(expectedOutput));
console.log(expectedOutput);

【讨论】:

  • 井地图很神奇,如果我们使用循环呢?并且输出必须是字符串@justcode
  • @ZrClassic 你可以查看我更新的答案,地图确实是循环的。您也可以使用其他循环,例如 reduce、foreach 等。这只是一个示例。
【解决方案2】:

试试这个

//contoh input
var input = [
                ["0001", "Mike", "London", "21/05/1989", "Reading"],
                ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
                ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
                ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
            ];

var data = ["ID: ", "Name: ", "Birthday: ", "Hobby: "];

// for(var i = 0 ; i < data.length ; i++){
//   console.log(data[i]);

var k = 0;
for(var i = 0 ; i < input.length ; i++){
   for(var j = 0; j <= data.length ; j++){
       if(j == 2 ){
          console.log(data[k] + input[i][j]+ " " + input[i][j+1]);
          j++;
       }
       else
          console.log(data[k] + input[i][j]);
       k++;
   }k=0;
}

【讨论】:

    【解决方案3】:
    let output = input.map( item => {
    return ({ID:item[0],name:item[1],birthDay:item[2]+item[3],hobby:item[4]})
    })
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      由于数组中的索引是基于 0 并且 i=0 你必须改变

      i <= input.length
      

      i < input.length
      

      //contoh input
      var input = [
          ["0001", "Mike", "London", "21/05/1989", "Reading"],
          ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
          ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
          ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
      ];
      
      var data = ["ID: ", "Name: ", "Birthday: ", "Hobby: "];
      
      for(var i = 0 ; i < input.length ; i++){
        for(var j = 0  ; j < input.length ; j++){
          for(var i = 0 ; i < data.length; i++){
            if(i == 2)
              console.log(data[i] + input[j][i] +' '+ input[j][i+1])
            else if(i == 3)
              console.log(data[i] + input[j][i+1])
            else
              console.log(data[i] + input[j][i])
          };
          console.log('=================')
        };
      };

      【讨论】:

      • 在那个代码上,你的爱好是:日期,我想要生日:城市+数组中的日期
      • 你很摇滚,完美;
      • @ZrClassic,很高兴为您提供帮助 :)
      【解决方案5】:

      var input = [
                      ["0001", "Mike", "London", "21/05/1989", "Reading"],
                      ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
                      ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
                      ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
                  ];
                  
      let output= input.map(([ID, Name, Country, DOB, Hobby]) =>{
          return({
            ID, 
            Name, 
            Birthday: `${Country} ${DOB}`, 
            Hobby
          })
      })
      
      console.log(output)

      【讨论】:

        【解决方案6】:

        这应该可行。只需在打印前检查必要的条件。 并检查是否打印超出范围的索引所指向的数组值。这就是它显示未定义的原因。

        var input = [
          ["0001", "Mike", "London", "21/05/1989", "Reading"],
          ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
          ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
          ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
        ];
        
        var data = ["ID: ", "Name: ", "Birthday: ", "Hobby: "];
        
        for (var j = 0; j < input.length; j++) {
          for (var i = 0; i < input[j].length; i++) {
            if (i === 2)
              console.log(data[i] + input[j][i] + " " + input[j][i + 1]);
            else if (i === 3)
              console.log(data[i] + input[j][i+1]);
          };
        };

        【讨论】:

          【解决方案7】:

          你可以先合并input数组中的城市+日期,然后循环会更容易

          var expectedOutput = input.map(a=>{
           return [a[0], a[1], a[2]+' '+a[3], a[4]]
          })
          

          【讨论】:

            【解决方案8】:

            使用原生 ForLoop 并在 one 循环中您可以这样做:

            //contoh input
            var input = [
                            ["0001", "Mike", "London", "21/05/1989", "Reading"],
                            ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
                            ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
                            ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
                        ];
            
            var data = ["ID: ", "Name: ", "Birthday: ", "Hobby: "];
            
            for(var i = 0 ; input[i] && input[i].length ? i < input[i].length : null ; i++) {
              console.log(data[0] + input[i][0]+ ',', data[1] + input[i][1]+ ',', data[2]+input[i][2] + ' '+ input[i][3]+ ',', data[3]+ input[i][4]);
            };

            PS: 使用 ES6 运算符如 map 和 forEach 更优雅..

            【讨论】:

              【解决方案9】:

              尝试在第三个“for”语句中更改变量名。我没有对循环进行深入研究,但我相信您不想在第三个循环中使用变量“i”。尝试将其命名为“var k”

              【讨论】:

              • 我这样做了,这让单词变得混乱 LOL
              【解决方案10】:

              //contoh input
              var input = [
                              ["0001", "Mike", "London", "21/05/1989", "Reading"],
                              ["0002", "Sara", "Manchester", "10/10/1992", "Swimming"],
                              ["0003", "John", "Kansas", "25/12/1965", "Cooking"],
                              ["0004", "Dave", "Nevada", "6/4/1970", "going to gym"]
                          ];
              
              var data = ["ID: ", "Name: ", "Birthday: ", "Hobby: "];
              
              // for(var i = 0 ; i < data.length ; i++){
              //   console.log(data[i]);
              
              
                var check = 0;
                for(var j = 0  ; j < input.length ; j++){
                var count = 0;
                outerloop:
                
                for(var i = 0 ; i < data.length; i++){
                if(count==2){
                  console.log(data[i] + input[j][i] +' '+ input[j][i+1]);
                count = 0;
                check = 1;
                  continue outerloop;
                } if(check==1){
                  count++;
                   console.log(data[i] + input[j][i+1]);
                  check = 0; 
              
              }
              else{
                  count++;
                   console.log(data[i] + input[j][i]);
                }
                  };
                };

              简介: 我使用了一个 if condition 和 1 个 ifelse condition,并为这两个条件使用了 2 个变量,第一个变量仅在条件是计数变量时检查索引是否为生日,如果是,则连接当前值和它的相邻值,然后我使用了一个检查变量,该变量在 if 条件下为真,我们将继续循环而不深入该迭代。 check 变量仅用于识别您在 check 为 0 时实现的正常迭代,如果为 1,则将显示相邻索引。希望对你有帮助。

              【讨论】:

              • 感谢您的解释,我仍在尝试理解您的代码逻辑:)
              猜你喜欢
              • 1970-01-01
              • 2023-02-04
              • 2015-08-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-04-15
              相关资源
              最近更新 更多