【问题标题】:In an array of arrays how do I multiply each value by a different multiplier在数组数组中,如何将每个值乘以不同的乘数
【发布时间】:2016-06-12 14:30:07
【问题描述】:
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

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

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

更新:

感谢大家的cmets!你们都太棒了!

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

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

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

【问题讨论】:

  • 您只需要相乘还是存储结果?
  • 乘以 *********** 间隔的结果并记录 - 与我记录内部数组值的方式类似
  • 你的意思是把所有行 A 放在你的例子中乘以什么?

标签: javascript arrays multidimensional-array arr


【解决方案1】:

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

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('******************');
  })
})

【讨论】:

  • 如果我忽略乘数恰好是 10 的倍数会怎么样?假设乘数是:21,45,56,67,87;
  • 因为您已经对这个问题有了三个答案,所以将其作为一个新问题发布,您可能会更幸运,并且更符合社区准则。
  • 谢谢,我会的。 ?
【解决方案2】:

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

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('******************');
    }
}

【讨论】:

    【解决方案3】:

    我认为这是最短的答案:

    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);

    如果有多个表达式,或者主体由非表达式语句组成,则箭头函数的主体只需要用 { .. } 括起来。如果只有一个表达式,而您省略了周围的 { .. } ,则表达式前面有一个隐含的 return,如前面的 sn-p 所示。

    【讨论】:

    • 可能是最短的,但从初学者的角度来看,这很可能完全令人困惑
    • 这是真的,但我喜欢 ES6 - 我无法抗拒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多