【问题标题】:Javascript: foreach skipping the first index (0)Javascript:foreach 跳过第一个索引(0)
【发布时间】:2016-05-12 13:27:14
【问题描述】:

一个有点倾斜的问题,我没弄明白。

我想从两个数组生成一个对象并给它们键,像这样:

 var A = [1, 2, 3, 4]; var B = [7, 8, 9, 19];

 [ { "x": 1, "y": 7 }, { "x": 2, "y": 8 }, { "x": 3, "y": 9 }, { "x":
     4, "y": 19 } ]

我写了以下代码:

var myData = []; var A = [1, 2, 3, 4]; var B = [7, 8, 9, 19];

A.forEach( function (item, index) {     
myData.push( { x: A[item], y: B[item] });   
});

但它的输出是

[ { "x": 2, "y": 8 }, { "x": 3, "y": 9 }, { "x": 4, "y": 19 }, {} ]

通过将 [item - 1] 放入函数中,它可以按我的意愿工作,但我不明白为什么我看到的 w3School 示例看起来非常简单并且从 index-0 开始工作:

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_foreach

我的小提琴示例:https://jsfiddle.net/53p5b3w8/5/

【问题讨论】:

    标签: javascript foreach


    【解决方案1】:

    你很接近,只需将item替换为index

    A.forEach( function (item, index) {   
       myData.push( { x: A[index], y: B[index] });   
    });
    

    或者干脆

    A.forEach( function (item, index) {   
       myData.push( { x: item, y: B[index] });   
    });
    

    基本上,当您说 A[item] 时,它需要 values(1,2,3,4) 而不是 index (0,1,2,3)。

    演示

    var A = [1, 2, 3, 4]; var B = [7, 8, 9, 19];
    var myData = [];
    A.forEach( function (item, index) {   
           myData.push( { x: item, y: B[index] });   
    });
    document.body.innerHTML += JSON.stringify( myData, 0, 4 )

    【讨论】:

      【解决方案2】:

      这就是你需要的:

      var c = A.map((item, index) => ({x: A[index], y: B[index}));
      

      【讨论】:

        【解决方案3】:

        顺便提一下,如果myData 只包含两个组合的数组,您也可以使用 map:

        var myData = A.map(function(item, index) {
          return { x: item, y: B[index] };
        });
        

        【讨论】:

          【解决方案4】:

          尝试在循环中使用index 而不是item,因为您正在遍历数组中的值而不是需要引用的索引:

          A.forEach( function (item, index) {     
              myData.push( { x: A[index], y: B[index] });   
          });
          

          示例

          var myData = [];
          var A = [1, 2, 3, 4];
          var B = [7, 8, 9, 19];
          
          A.forEach(function(item, index) {
            myData.push({
              x: A[item - 1],
              y: B[item - 1]
            });
          });
          
          console.log(myData);
          document.getElementById("demo").innerHTML = JSON.stringify(myData, null, 3);
          
          
          var myData = [];
          var A = [1, 2, 3, 4];
          var B = [7, 8, 9, 19];
          
          A.forEach(function(item, index) {
            myData.push({
              x: A[item],
              y: B[item]
            });
          });
          
          console.log(myData);
          document.getElementById("demo2").innerHTML = JSON.stringify(myData, null, 3);
          <p id="demo"></p>
          <br>
          <p id="demo2"></p>

          【讨论】:

            【解决方案5】:

            数组索引将从 0 开始

                        A.forEach( function (item, index) {     
                            myData.push( { x: A[index], y: B[index] });   
                        });
            

            如果您使用数组 A 进行排序,则可以通过以下方法不使用该数组

                        B.forEach( function (item, index) {     
                            myData.push( { x: index+1, y: B[index] });   
                        });
            

            【讨论】:

              猜你喜欢
              • 2016-05-26
              • 2018-11-08
              • 2023-03-13
              • 2017-04-17
              • 1970-01-01
              • 2018-06-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多