2016-11-12 15 views
0

2次元配列が与えられた場合、前の内側の配列の最後の番号を次の内側の配列の最初の番号に追加します。reduce(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]を返します。私は、これをどのように減らすことができるのかを見たいと思っていますが、forループが同じことをどのように達成するのかにも興味があります。

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、+ 7 6、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);

問題のあなたの説明を考えると
関連する問題