繁体   English   中英

使用lodash将子属性推入父对象

[英]Push child property to parent object using lodash

我有如下嵌套的对象:

 { Campaign_Type: 1 Campaign_TypeFull: {text: "Test my campaign", value: 1} End_Date: "07/26/2019" Live_Date: "07/15/2019" Name: "Death of An Art Collector - Book Signings" Status: "ACTIVE" } 

我需要的输出是将Campaign_TypeFull子对象转换为父对象属性,因为我的反应物料表仅接受平面数组。

 { Campaign_Type: 1 text: "Test my campaign", value: 1, End_Date: "07/26/2019" Live_Date: "07/15/2019" Name: "Death of An Art Collector - Book Signings" Status: "ACTIVE" } 

我尝试使用flatmap或map,但无法正常工作(我正在使用lodash )。

let griddata = flatMap(tabledata,({ _id,Name, Status,Live_Date, End_Date, Campaign_TypeFull }) => map(Campaign_TypeFull, Campaign_TypeFull => ({...Campaign_TypeFull, _id,Name, Status,Live_Date, End_Date })))

提前致谢。

您可以通过某些对象分解来轻松实现此目的

 const data = { Campaign_Type: 1,Campaign_TypeFull: { text: "Test my campaign",value: 1},End_Date:"07/26/2019",Live_Date: "07/15/2019",Name: "Death of An Art Collector - Book Signings",Status: "ACTIVE"} const flattenCampaign = ({Campaign_TypeFull, ...rest}) => { return Object.assign({}, Campaign_TypeFull, rest); }; console.log(flattenCampaign(data)) 

使用lodash merge,将对象合并在一起,然后摆脱merged属性。

 const obj = { Campaign_Type: 1, Campaign_TypeFull: { text: "Test my campaign", value: 1 }, End_Date: "07/26/2019", Live_Date: "07/15/2019", Name: "Death of An Art Collector - Book Signings", Status: "ACTIVE", } const flatobj = _.merge(obj, obj.Campaign_TypeFull); delete flatobj.Campaign_TypeFull; console.log(flatobj); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script> 

使用lodash可以使用_.flow()创建一个函数,该函数创建一个没有属性的对象(使用_.omit() ),获取属性值,然后将它们合并在一起:

 const { flow, over, partialRight: pr, spread, merge, get, omit } = _ const flattenProperty = key => flow( over([pr(omit, key), pr(get, key)]), // get an array of [obj without key, key values] spread(merge) // merge together ) const obj = {"Campaign_Type":1,"Campaign_TypeFull":{"text":"Test my campaign","value":1},"End_Date":"07/26/2019","Live_Date":"07/15/2019","Name":"Death of An Art Collector - Book Signings","Status":"ACTIVE"} const result = flattenProperty('Campaign_TypeFull')(obj) console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script> 

如果要使用具有多个嵌套属性的对象,则希望一次进行展平,可以使用_.transform()创建展平的对象函数:

 const flattenObj = obj => _.transform(obj, (r, v, k) => { if(_.isObject(v)) _.assign(r, flattenObj(v)) else r[k] = v }) const obj = {"Campaign_Type":1,"Campaign_TypeFull":{"text":"Test my campaign","value":1},"End_Date":"07/26/2019","Live_Date":"07/15/2019","Name":"Death of An Art Collector - Book Signings","Status":"ACTIVE"} const result = flattenObj(obj) console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM