在数组数组中,如何将每个值乘以不同的乘数

时间:2016-06-12 14:30:08

标签: javascript arrays multidimensional-array arr

var arrayOfArrays = [
    [1,2,3,4,5], /* row a */
    [1,2,3,4,5], /* row b */
    [1,2,3,4,5], /* row c */
    [1,2,3,4,5], /* row d */
    [1,2,3,4,5] /* row e */
];

for (var i = 0; i < arrayOfArrays.length; i++) {
  var outterArr = arrayOfArrays[i];
  for (var x = 0; x < outterArr.length; x++) {
    var innerArr = arrayOfArrays[x];
    console.log(innerArr[x]);
  console.log('******************');
  }
}

如上所示,我有一个多维数组。

我正在尝试遍历数组,并根据它们所在的行乘以每个值:

  • A行乘以10
  • A行乘以20
  • A行乘以30
  • A行乘以40
  • A行乘以50

到目前为止,在上面的代码中我已经设法循环遍历外部数组,循环遍历内部数组并打印由******************分隔的值。

我想知道将值乘以不同的行乘数并将每个结果记录在一行上的最佳方法是什么,间隔为****************** 。

更新:

感谢大家的评论!你真是太棒了!

似乎大多数评论都利用了乘数恰好是10的倍数这一事实。

如果乘数是唯一的,答案会如何变化:

  • A行乘以21
  • A行乘以45
  • A行乘以56
  • A行乘以67
  • A行乘以87

3 个答案:

答案 0 :(得分:1)

outterArr[x]获取值,因为outterArr是行。

&#13;
&#13;
var arrayOfArrays = [
    [1,2,3,4,5], /* row a */
    [1,2,3,4,5], /* row b */
    [1,2,3,4,5], /* row c */
    [1,2,3,4,5], /* row d */
    [1,2,3,4,5]  /* row e */
];

for (var i = 0; i < arrayOfArrays.length; i++) {
    var outterArr = arrayOfArrays[i];
    for (var x = 0; x < outterArr.length; x++) {
        var innerVal = outterArr[x];          // change this to outterArr[x]
        //             ^^^^^^^^^^^^
        console.log(innerVal * (i + 1) * 10); // multiply value 
        console.log('******************');
    }
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以在数组上运行forEach并根据索引乘以:

&#13;
&#13;
var arrayOfArrays = [
    [1,2,3,4,5], /* row a */
    [1,2,3,4,5], /* row b */
    [1,2,3,4,5], /* row c */
    [1,2,3,4,5], /* row d */
    [1,2,3,4,5] /* row e */
];

arrayOfArrays.forEach((a, i) => {
  let mult = ((i + 1) * 10)
  a.forEach((num) => {
    num = num * mult
    console.log(num)
    console.log('******************');
  })
})
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我认为这是最短的答案:

&#13;
&#13;
var arrayOfArrays = [
    [1,2,3,4,5], /* row a */
    [1,2,3,4,5], /* row b */
    [1,2,3,4,5], /* row c */
    [1,2,3,4,5], /* row d */
    [1,2,3,4,5] /* row e */
];

var newArr = arrayOfArrays.map( (v,i) => v.map( x=> x *= (i+1) * 10 ) );

console.log(newArr);
&#13;
&#13;
&#13;

如果有多个表达式,或者正文由非表达式语句组成,则箭头函数的主体只需要被{..}括起来。如果只有一个表达式,并且省略了周围的{..},则表达式前面会有一个隐含的返回值,如上一个片段所示。