我正在学习Lodash这是一个 JavaScript 库。
在这里,我有一个像这样的对象:
场景#1:
{
name: 'abc'
email: 'abc@example.com'
z: [
{
time: '<any-time>',
t: 't1'
},
{
time: '<any-time>',
t: 't2'
},
{
time: '<any-time>',
t: 't3'
}
]
}
我想要使用 lodash 得到这个结果:
[
{
name: 'abc'
email: 'abc@example.com'
z: [
{
time: '<any-time>',
t: 't1'
}
]
},
{
name: 'abc'
email: 'abc@example.com'
z: [
{
time: '<any-time>',
t: 't2'
}
]
},
{
name: 'abc'
email: 'abc@example.com'
z: [
{
time: '<any-time>',
t: 't3'
}
]
}
]
场景#2:
{
name: 'abc'
email: 'abc@example.com'
z: [
{
time: '<any-time>',
t: 't1'
},
{
time: '<any-time>',
t: 't1' // see here t1 repeated
},
{
time: '<any-time>',
t: 't3'
}
]
}
那么结果应该是:
[
{
name: 'abc'
email: 'abc@example.com'
z: [
{
time: '<any-time>',
t: 't1'
},
{
time: '<any-time>',
t: 't1'
}
]
},
{
name: 'abc'
email: 'abc@example.com'
z: [
{
time: '<any-time>',
t: 't3'
}
]
}
]
如果您不清楚我的详细信息,请告诉我。
谢谢:)
编辑: 我尝试了以下代码,
var finalArr = [];
var baseInfo = _.omit(obj, 'z');
var childArr = obj.z;
for(var j = 0; j < childArr.length; j++){
var flattenObj = angular.copy(baseInfo);
flattenObj.z = [];
flattenObj.z.push(childArr[j]);
finalArr.push(flattenObj);
}
它只是处理场景#1。我认为它比 lodash 使用更多的 javascript。
最佳答案
此代码适用于两种情况:
// I assume obj is the input object
var result = _.map(obj.z, function(value) {
return {
z : value,
name : obj.name,
email : obj.email
};
});
请注意,对于此示例,您根本不需要 lodash。你可以简单地这样写:
// I assume obj is the input object
var result = obj.z.map(function(value) {
return {
z : value,
name : obj.name,
email : obj.email
};
});
关于javascript - lodash:根据对象的子数组创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33300900/