2017-02-12 35 views
1

正在努力更好地掌握嵌套數組。我有一個嵌套在裏面的兩個數組作爲索引。我想弄清楚如何添加這些。我明白你如何將它們添加如果他們是單獨的數組,但我想知道如何/如果可能的話,你可以映射通過嵌套數組添加索引。將嵌套數組的索引與JavaScript映射彙總在一起

,我看目前的陣列是

strArr= [[5, 2, 3], [2, 2, 3] ]; 

如果這是兩個不同的陣列我可以簡單地運行與指數作爲第二個參數,如地圖...

var arr = [1,2,3,4]; 
var arr2 = [1,1,1,2,9]; 
arr.map((a, i) => a + arr2[i]); 

但是,我不能與指數

strArr.map((a,idx) => a[0][idx] + a[1][idx]) // [Nan, Nan] 

最好的我可以做得到任何additio實現這一目標n是

return strArr.map(a => a[0] + a[1]) // [7,4] 

但是,我不知道爲什麼我只得到[7,4]

回答

1

你迭代外陣列,其中有2長度超過。因此你會得到兩個元素的結果。

您可以使用Array#reduce作爲外部數組,Array#forEach作爲內部數組並對給定索引處的值進行求和。

var strArr= [[5, 2, 3], [2, 2, 3] ]; 
 

 
console.log(strArr.reduce((r, a) => (a.forEach((b, i) => r[i] = (r[i] || 0) + b), r), []));

0

可以使用.reduce功能來總結你的指數

var arr = [1, 2, 3, 4]; 
var arr2 = [1, 1, 1, 2]; 

var result = arr 
    .map((item, i) => i + arr2[i]) 
    .reduce((memo, value) => memo + value); 
console.debug("res: ", result); 
// res: 11 

然而,你將不得不處理情況下,當數組長度不等於eachover或不數值

0
  1. 地圖父陣列中的每個元件(子陣列)

  2. 對於每個子陣列減少和總結

strArr= [[5, 2, 3], [2, 2, 3] ]; 
 
var result = strArr.map((arr)=>arr.reduce((a,b)=>a+b)); 
 
console.log(result);

0

爲什麼不只是靶向/分割原始陣列?

「如果這是兩個不同的陣列我可以簡單地運行索引地圖作爲第二個參數」

然後讓兩個獨立的陣列...

strArr= [[5, 2, 3], [2, 2, 3] ]; /* becomes strArr[0] & strArr[1] */ 
 

 
console.log(strArr[0].map((a, i) => a + strArr[1][i]));

+0

我能夠做到這一點。要想通過這個循環來找出一種不同的方式,這是一個更大的挑戰。 – Winnemucca