2017-08-14 66 views
0

我現在有下面的代碼如何ES6休息和傳播工作

var _ = require('underscore'); 
var raw =[ 
    { 
    key :"name",value:"henry" 
    }, 
    { 
    key :"age",value:"old" 
    }, 
    { 
    key :"food",value:"matooke" 
    }, 
    { 
    key :"kids",value:"Acacia" 
    }, 
    { 
    key :"garbageA",value:"kasailoA" 
    }, 
    { 
    key :"garbageB",value:"kasasiroB" 
    }, 

] 
const endShape = _(raw) 
.filter(({key}) =>!/garbage/.test(key)) 
.map(({key,value})=>({[key]:value})) 
.reduce((acc,curr)=>({...curr, ...acc})); 

console.log(endShape); 

代碼工作很好,我在下面的教程。 我瞭解.map()方法。 雖然我沒能得到一個什麼樣

.reduce((acc,curr)=>({...curr, ...acc})); 

是做一個明確的解釋。如何得出這個正確的結果?

{ kids: 'Acacia', food: 'matooke', age: 'old', name: 'henry' } 
+0

你有什麼語法錯誤ES6。如果它對你「起作用」,你似乎正在使用[實驗性轉譯器](http://babeljs.io/docs/plugins/transform-object-rest-spread/) – Bergi

+0

哪種語法錯誤?請清楚解釋 – henrybbosa

+0

'{... curr,... acc}'是無效的ES6。 – Bergi

回答

1

基本上,map函數輸出該:

[ 
    { 
    name: 'henry' 
    }, 
    { 
    age: 'old' 
    }, 
    { 
    food: 'matooke' 
    }, 
    { 
    kids: 'Acacia' 
    } 
] 

reduce將工作,然後像Object.assign。它將遍歷上面的數組,並將每個鍵/值對添加到累積對象,這是開始時的空對象。這就是爲什麼你會得到:

{ kids: 'Acacia', food: 'matooke', age: 'old', name: 'henry' } 

的積累對象是undefined在啓動,但不要緊感謝解構:

const foo = undefined; 
 
const bar = { a: 'b' }; 
 

 
console.log({...foo, ...bar })

+0

那麼我知道理論上@Erazihel.But哪裏是一個積累對象 – henrybbosa

+0

它是否支持作爲第二個參數傳遞給reduce函數? – henrybbosa

+0

@HenryBbosa我已經更新了我的答案,告訴你爲什麼第一次積累可以是'未定義'。 – Erazihel