2016-06-12 60 views
2
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

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

我想知道什么是最好的方式乘以不同的行乘数的价值观和每个结果记录在一行,由***************** *。

UPDATE:

感谢您的意见大家!你真了不起!

这似乎是大多数意见注意到一个事实,即乘数碰巧的答案会如何改变,如果乘数是独特的10

倍数优势:

  • A行乘以21
  • A行乘以45
  • A行乘以56
  • A行乘以67
  • 行由87
+0

你只需要乘或存储结果? –

+0

以***********为单位乘以并记录结果 - 以类似的方式记录内部数组值 – user6456392

+0

您是否想要将所有A行放在要乘以的内容的示例中通过? – Gabs00

回答

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

+0

如果我忽略乘数恰好是10的倍数,该怎么办?可以说乘数是:21,45,56,67,87; – user6456392

+0

因为你已经有三个这个问题的答案,所以你可能会有更多的运气,并且更加符合社区的指导方针,把它作为一个新问题发布。 –

+0

谢谢,我会做的。 – user6456392

1

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

+0

这真棒! – user6456392

0

我认为这是最短的答案:

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

箭头函数体只需要通过{..}被封闭,如果有更多的而不是一个表达式,或者如果主体由非表达式语句组成。如果只有一个表达式,并且省略了周围的{..},则表达式前面会有一个隐含的返回值,如前面的代码片段所示。

+2

可能是最短的,但从初学者的角度来看,这很可能完全混淆 – charlietfl

+0

这是真的,但我爱ES6 - 我根本无法抗拒 – Przemek