Gia*_*son 10 javascript ecmascript-6 lodash
flatten,flattenDeep或flattenDepth of lodash只接受数组.如何展平嵌套对象?
var data = {
"dates": {
"expiry_date": "30 sep 2018",
"available": "30 sep 2017",
"min_contract_period": [{
"id": 1,
"name": "1 month",
"value": false
}, {
"id": 2,
"name": "2 months",
"value": true
}, {
"id": 3,
"name": "3 months",
"value": false
}]
},
"price": {
"curreny": "RM",
"min": 1500,
"max": 2000
}
}
Run Code Online (Sandbox Code Playgroud)
我希望嵌套属性成为第一级,比如expiry_date应该是1级,而不是日期,我认为日期应该消失,不再需要它了.我可以手动完成,使用map(),但我希望使用lodash来简化任务.
RaR*_*RaR 10
最简单的解决方案之一是将嵌套对象与父对象合并,
_.merge(data, data.dates);
Run Code Online (Sandbox Code Playgroud)
这将带来所有data.dates财产data.然后删除data.dates
delete data.dates
Run Code Online (Sandbox Code Playgroud)
ES6版本:
var data = {
"dates": {
"expiry_date": "30 sep 2018",
"available": "30 sep 2017",
"min_contract_period": [{
"id": 1,
"name": "1 month",
"value": false
}, {
"id": 2,
"name": "2 months",
"value": true
}, {
"id": 3,
"name": "3 months",
"value": false
}]
},
"price": {
"curreny": "RM",
"min": 1500,
"max": 2000
}
};
var {dates: {expiry_date, ...dates}, ...rest} = data;
var flatData = {dates, expiry_date, ...rest}
console.log(flatData)Run Code Online (Sandbox Code Playgroud)
需要注意的一点是,必须小心深度嵌套的析构.在这个例子中,如果data.dates是undefined,你将尝试解构它,将抛出错误.
var data = {"dates": {"expiry_date": "30 sep 2018","available": "30 sep 2017","min_contract_period": [{"id": 1,"name": "1 month","value": false}, {"id": 2,"name": "2 months","value": true}, {"id": 3,"name": "3 months","value": false}]},"price": {"curreny": "RM","min": 1500,"max": 2000}},
result = _.merge(_.get(data, 'dates'), _.pick(data, 'price'));
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16379 次 |
| 最近记录: |