[英]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.