2016-11-12 58 views
0

鑑於2D陣列,我想將前述內數組的最後一個號碼添加到下一內陣列的所述第一數目。添加對與減少(JavaScript的)

我設法起牀的地步:

var output= [[1,2,3],[4,5,6],[7,8,9],[1,2,3]] //this becomes... 
output = [3,4,6,7,9,1] (edited typo) 

我現在想加對了返回這個數組:

output = [9, 11, 10] 

到目前爲止,這是我,並返回[3,6,4,7,9,1]。我希望看到如何減少可以用於這一點,但也有興趣在如何循環會完成同樣的事情。

var output= [[1,2,3],[4,5,6],[7,8,9],[1,2,3]] 
output = output 
    .reduce((newArr,currArr)=>{ 
    newArr.push(currArr[0],currArr[currArr.length-1]) //[1,3,4,6,7,9] 
    return newArr 
    },[]) 
    output.shift() 
    output.pop() 
return output 
+3

鑑於您的問題描述,想必你想要的輸出爲'[7,13,10]'(我的工作:'[3 + 4,6 + 7,9 +1]')?或者我誤解了? –

+1

的確得到'[3,6,4,7,9,1]的邏輯'是奇怪的,而不是像在第一個段落中描述。 – trincot

回答

3

可以使用索引參數減少

let output= [[1,2,3],[4,5,6],[7,8,9],[1,2,3]]; 
 
output = output 
 
    .reduce((newArr, currArr, i, origArr) => { 
 
    if (i > 0) { 
 
     let prevArr = origArr[i - 1]; 
 
     newArr.push(currArr[0] + prevArr[prevArr.length - 1]); 
 
    }   
 
    return newArr 
 
    }, []) 
 
console.log(output)

0

並不清楚應該出現在輸入數組的最後一個元素是什麼?您可以使用for..of循環,Array.prototype.entries()總結陣列的具體指標值。

let output = [ 
 
    [1, 2, 3], 
 
    [4, 5, 6], 
 
    [7, 8, 9], 
 
    [1, 2, 3] 
 
]; 
 
let res = Array.from({ 
 
    length: output.length - 1 
 
}); 
 
for (let [key, value] of output.entries()) { 
 
    if (key < output.length - 1) 
 
    res[key] = value[value.length - 1] + output[key + 1][0] 
 
} 
 
console.log(res)

0

你可以做這樣的事情,用減少。

var input = [ 
 
    [1, 2, 3], 
 
    [4, 5, 6], 
 
    [7, 8, 9], 
 
    [1, 2, 3] 
 
]; 
 

 

 
let output = []; 
 
input.reduce((prevArr, currentArray) => { 
 

 
    if (prevArr) { 
 
    output.push(prevArr[prevArr.length - 1] + currentArray[0]); 
 
    } 
 
    return currentArray; 
 
}); 
 
console.log(output);