2017-08-06 48 views
0

當JS寫入LIB /框架代碼API我通常更喜歡這個的一部分的對象陣列:JS - Transfrom對象與鍵是與util的文庫陣列對象

const definition = { 
    foo: { 
    someProp: 'foo-prop' 
    }, 
    bar: { 
    someProp: 'bar-prop' 
    } 
} 

作爲替代

const definition2 = [ 
{ name: 'foo', someProps:'foo-prop'}, 
{ name: 'bar', someProps:'bar-prop'} 
] 

因爲我發現以前的語法友好。

當處理過程的結構我更喜歡陣列如圖definition2所以我結束了該變換代碼:

const arrayDefinition = Object.entries(objDefinition) 
    .map(([key, val]) => ({name: key, ...val})) 

有一種方法如何減少與井util的像lodash庫已知此鍋爐或ramba這將有類似的功能?

const objToArray = obj => keyProp => 
    Object.entries(obj) 
     .map(([key, val]) => ({[keyProp]: key, ...val})) 

我更喜歡使用現有的庫創建我自己的util函數。

+0

據我所知,lodash-fp中沒有具體的方法,所以你會用lodash代替Javascript樣板,在我看來沒有任何改進。當然,有人可能會寫一個mixin來使用lodash。 https://github.com/lodash/lodash/wiki/FP-Guide – Xotic750

+0

我也沒有看到任何東西準備在內存中使用。 – Xotic750

+0

'underscore'和'loadash'的'map'函數也可以用於'object'(除了'collection')來實現這一點。 –

回答

0

您可以通過使用工具庫loadashunderscore那麼這裏的原型增加全球Object

Object.prototype.toArr = function(propName){ 
 
    return Object.keys(this).map(key => Object.assign({[propName]:key}, this[key])); 
 
} 
 

 
const definition = { 
 
    foo: { 
 
    someProp: 'foo-prop' 
 
    }, 
 
    bar: { 
 
    someProp: 'bar-prop' 
 
    } 
 
} 
 

 
let arr = definition.toArr('name'); 
 

 
console.log(JSON.stringify(arr, null, ' '))

0

如果你想有一個更簡單的方法是你

一個簡單的解決方案
_.map(obj, function(val, key) { 
    return { 
     name: key, 
     someProp: val.someProp 
    } 
}) 

此代碼適用於underscore.js以及loadash,因爲map函數適用於對象和數組。