我有一个对象数组,其中包含一个嵌套的对象数组,例如:
var cars = [
{
Plate: '112211',
Details:
[
{
Desc: 'Blah11 Blah Blah',
Miles: '111',
Color: 'blue'
},
{
Desc: 'Blah B22lah Blah',
Miles: '222',
Color: 'green'
},
],
Make:'Honda'
},
Plate: '223322',
Details:
[
{
Desc: 'Blah Blah B33lah',
Miles: '333',
Color: 'yellow'
},
{
Desc: 'Blah B44lah Blah',
Miles: '444',
Color: 'red'
}
],
Make:'GMC'
},
Plate: '334433',
Details:
[
{
Desc: 'Bl55ah Blah Blah',
Miles: '555',
Color: 'blue'
},
{
Desc: 'Blah B66lah Blah',
Miles: '666',
Color: 'pink'
},
],
Make:'Ford'
}
]
我正在尝试找到一种方法将其转换为一个新数组,以展平或合并嵌套数组。我们的目标是:
[
{
Plate: '112211',
Desc: 'Blah11 Blah Blah',
Miles: '111',
Color: 'blue',
Make:'Honda'
},
{
Plate: '112211',
Desc: 'Blah B22lah Blah',
Miles: '222',
Color: 'green',
Make: 'Honda'
},
{
Plate: '223322',
Desc: 'Blah Blah B333lah',
Miles: '333',
Color: 'yellow'
Make: 'GMC'
},
{
Plate: '223322',
Desc: 'Blah Bl444ah B33lah',
Miles: '444',
Color: 'red',
Make: 'GMC'
},
{
Plate: '334433',
Desc: 'Bl555ah Blah B33lah',
Miles: '555',
Color: 'blue',
Make: 'Ford'
},
{
Plate: '334433',
Desc: 'Blah Bl666ah B33lah',
Miles: '666',
Color: 'pink',
Make: 'Ford'
},
]
lodash _.flatten 和 _.flattenDeep 没有做任何事情。我还尝试过执行 _.chain 并展平来构建新数组,但结果是空的
var actions = _.chain(cars).flatten("Details");
for (i = 0; i < cars.length; i++) {
actions.each(function(action) {
list.push(cars[i].Plate);
list.push(action);
list.push(cars[i].Make);
最佳答案
这是代码
function merge(collection) {
return _(collection).map(function(obj) {
return _(obj)
.pickBy(_.isArray)
.values()
.flatten()
.map(function(dest) {
return _.merge(dest, _.omitBy(obj, _.isArray));
})
.value();
})
.flatten()
.value();
}
var cars = [{
Plate: '112211',
Details: [{
Desc: 'Blah11 Blah Blah',
Miles: '111',
Color: 'blue'
}, {
Desc: 'Blah B22lah Blah',
Miles: '222',
Color: 'green'
}],
Make: 'Honda'
}, {
Plate: '223322',
Details: [{
Desc: 'Blah Blah B33lah',
Miles: '333',
Color: 'yellow'
}, {
Desc: 'Blah B44lah Blah',
Miles: '444',
Color: 'red'
}],
Make: 'GMC'
}, {
Plate: '334433',
Details: [{
Desc: 'Bl55ah Blah Blah',
Miles: '555',
Color: 'blue'
}, {
Desc: 'Blah B66lah Blah',
Miles: '666',
Color: 'pink'
}],
Make: 'Ford'
}];
var result = merge(cars);
document.querySelector('#result').innerHTML = JSON.stringify(result, null, 2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.5.1/lodash.min.js"></script>
<pre id="result"></pre>
关于javascript - 在 JavaScript 中合并嵌套的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35593045/