2016-01-13 76 views
1

到flattern阵列我有对象数组,每个对象具有列表以及每个嵌套列表包含1和2使用underscorejs由嵌套数组项

[{ 
    "name":"a", 
    "companies":[1,2] 
}, 
{ 
    "name":"b", 
    "companies":[1,2] 
}, 
{ 
    "name":"c", 
    "companies":[1,2] 
}] 

我想通过这样underscorejs创建dupplicted列表:

[{ 
    "name":"a", 
    "company":1 
}, 
{ 
    "name":"a", 
    "company":2 
}, 
{ 
    "name":"b", 
    "company":1 
}, 
{ 
    "name":"b", 
    "company":2 
}, 
{ 
    "name":"c", 
    "company":1 
}, 
{ 
    "name":"c", 
    "company":2 
}] 

怎么办?

回答

1

下面是我如何与下划线尝试它。

function makeCompany(name) { 
    return function (company) { 
    return { name: name, companies: company }; 
    } 
} 

function splitCompany(obj) { 
    return _.map(obj.companies, makeCompany(obj.name)); 
} 

对于阵列中的每个对象,使用splitCompany创建并返回基于companies数据的两个对象,然后压平返回的数组。

var result = _.flatten(_.map(arr, splitCompany)); 

DEMO

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);