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

时间:2019-07-18 13:01:53

标签: javascript 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或地图,但无法正常运行(我正在使用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 })))

谢谢。

3 个答案:

答案 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>