我有如下嵌套对象:
{
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
或地图,但无法正常运行(我正在使用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 })))
谢谢。
答案 0 :(得分:2)
您可以很容易地通过一些对象分解来实现此目的
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))
答案 1 :(得分:2)
使用lodash合并,然后将对象合并在一起,然后摆脱合并的属性。
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>
答案 2 :(得分:0)
使用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>