2017-06-18 93 views
3

我這裏處理的函數:分解函數映射,減少-JS

function transformEmployeeData(array) { 
    return array.map(function(data) { 
    return data.reduce(function(a, b) { 
     a[b[0]] = b[1]; 
     return a; 
    }, {}) 
    }); 
} 
transformEmployeeData(array); 

該函數將數組這樣的對象:

[ 
    {firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'}, 
    {firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'} 
] 

所以,如果你有一個數組:

[ 
    [ 
     ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'] 
    ], 
    [ 
     ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager'] 
    ] 
] 

它會將其轉換爲。

我要專注於這一部分:

return array.map(function(data) { 
    return data.reduce(function(a, b) { 
     a[b[0]] = b[1]; 
     return a; 
    }, {}) 
    }); 

我研究了地圖功能,它遍歷數組,並用它做什麼,而減少功能冷凝陣列成一個單一的價值。現在我不清楚這兩個函數如何一起返回轉換後的數組對象。有沒有人可以幫我理解這個部分的俗語?或者如果沒有,是否有任何最光鮮的方法來實現相同?

SOrry新手。

+0

請檢查此鏈接 - https://danmartensen.svbtle.com/javascripts-map-reduce-and-filter關於地圖,縮小和過濾 –

回答

2

從這個意義上說,映射數組意味着返回一個新的數組,每個數值根據某個映射函數進行轉換。

const numbers = [1, 2, 3]; 
 
const squares = numbers.map(num => num ** 2); 
 
console.log(squares);

爲了減少的陣列裝置,如你已經說過了,它的元素組合成單個值。

const numbers = [1, 2, 3]; 
 
const sum = numbers.reduce((total, num) => total + num, 0); 
 
console.log(sum);

在你的情況在這裏,你有3個級別的嵌套數組和過程可分爲3個功能單元。理解正在發生的事情的最簡單方法是從最內在的一點開始,然後向外擴展到頂層數組的映射。

在最內層,一個由[property, value]形式的2個元素組成的數組被添加到一個對象中,使得第一個元素是屬性名稱,第二個元素是值。

const arr = ['name', 'bob']; 
 

 
// property is item[0], value is item[1] 
 
const propertyName = arr[0]; 
 
const propertyValue = arr[1]; 
 

 
const obj = {}; 
 
obj[propertyName] = propertyValue; 
 

 
console.log(obj); // { name: 'bob' }

在中等水平,我們有一個陣列,其中每個元件是上述2個元素的數組。通過將每個2元素數組轉換爲對象的屬性和值,這個數組數組被縮減爲一個對象。

const arr = [ 
 
    ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'] 
 
]; 
 

 
const reduced = arr.reduce((obj, item) => { 
 
    obj[item[0]] = item[1]; // add property and value to new object 
 
    return obj;    // return the object so next array item can be converted 
 
}, {}); 
 

 
console.log(reduced);

最後,頂層映射只是2-元件陣列的上述陣列(3個水平陣列)的數組轉換成得到了他們的屬性和值作爲對象的數組前面提到過。