使用下划线js按嵌套数组项拼合数组
Using underscorejs to flattern array by nested array item
我有对象数组,每个对象都有列表,每个嵌套列表包含 1 和 2。
[{
"name":"a",
"companies":[1,2]
},
{
"name":"b",
"companies":[1,2]
},
{
"name":"c",
"companies":[1,2]
}]
我想像这样通过 underscorejs 创建复制列表:
[{
"name":"a",
"company":1
},
{
"name":"a",
"company":2
},
{
"name":"b",
"company":1
},
{
"name":"b",
"company":2
},
{
"name":"c",
"company":1
},
{
"name":"c",
"company":2
}]
如何才能做到?
您也可以在没有 underscore.js
的情况下执行此操作。以下为纯js版:
var data = [{
"name":"a",
"companies":[1,2]
},
{
"name":"b",
"companies":[1,2]
},
{
"name":"c",
"companies":[1,2]
}];
var result = [];
data.forEach(function(item){
item.companies.forEach(function(company){
result.push({"name": item.name, "company": company});
});
});
console.log(result);
下面是我尝试使用下划线的方式。
function makeCompany(name) {
return function (company) {
return { name: name, companies: company };
}
}
function splitCompany(obj) {
return _.map(obj.companies, makeCompany(obj.name));
}
对于数组中的每个对象,使用 splitCompany
根据 companies
数据创建和 return 两个对象,然后展平 returned 数组。
var result = _.flatten(_.map(arr, splitCompany));
我有对象数组,每个对象都有列表,每个嵌套列表包含 1 和 2。
[{
"name":"a",
"companies":[1,2]
},
{
"name":"b",
"companies":[1,2]
},
{
"name":"c",
"companies":[1,2]
}]
我想像这样通过 underscorejs 创建复制列表:
[{
"name":"a",
"company":1
},
{
"name":"a",
"company":2
},
{
"name":"b",
"company":1
},
{
"name":"b",
"company":2
},
{
"name":"c",
"company":1
},
{
"name":"c",
"company":2
}]
如何才能做到?
您也可以在没有 underscore.js
的情况下执行此操作。以下为纯js版:
var data = [{
"name":"a",
"companies":[1,2]
},
{
"name":"b",
"companies":[1,2]
},
{
"name":"c",
"companies":[1,2]
}];
var result = [];
data.forEach(function(item){
item.companies.forEach(function(company){
result.push({"name": item.name, "company": company});
});
});
console.log(result);
下面是我尝试使用下划线的方式。
function makeCompany(name) {
return function (company) {
return { name: name, companies: company };
}
}
function splitCompany(obj) {
return _.map(obj.companies, makeCompany(obj.name));
}
对于数组中的每个对象,使用 splitCompany
根据 companies
数据创建和 return 两个对象,然后展平 returned 数组。
var result = _.flatten(_.map(arr, splitCompany));