2017-05-14 11 views
0

私はJSのMDNで配列を平坦化する方法のコードを読んでいます。そして、正常に動作しますが、この場合には動作していない理由を私は理解していない:なぜflattenは機能していませんか?

const data = [null, ['a', 'b', 'c']] 
const flattened = data.reduce((acc, cur) => { 
    if(null != cur) 
     acc.concat(cur) 
}, []) 

と、このエラー:

TypeError: Cannot read property 'concat' of undefined 

これを修正する方法は?

+0

に渡された関数から返されていない(多分またはfalseの値を?)うち、あなたも早く1によってそれを行うことができ配列を使用して配列をソートする:data.filter(cur => cur!== null).reduce(acc、cur)=> acc.concat(cur)、[]); – thibmaek

+0

@naomikリンクされた質問で、質問の特定の問題は、リンクされた質問の回答によって対処されません。 'Array.prototype.reduce()'コールバック関数から値が返されない質問/回答がありますか? – guest271314

+0

@thibmaek配列上で一度だけ繰り返したいと思っていました。フィルタを使用していた場合は、reduceメソッドをもう一度繰り返します。 –

答えて

4

目的はnull値フィルタリングすることである場合には値が.reduce()

const data = [null, ['a', 'b', 'c']] 
 
const flattened = data.reduce((acc, cur) => { 
 
     if (cur !== null) 
 
      acc = acc.concat(cur); 
 
     return acc 
 
}, []); 
 

 
console.log(flattened);

+0

@LucasAlmeidaCarottaまた、 'acc.concat(cur)'は 'acc = acc.concat(cur)'または 'acc.push(... cur)'でなければなりません。 – guest271314

関連する問題