我正在学习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
};
});