我有一组对象,如下面的
[{name: 'India', language: 'Hindi'},
{name: 'US', language: 'English'},
{name: 'US', language: 'Spanish'},
{name: 'India', language: 'Bengali'},
{name: 'Japan', language: 'Japanese'},
{name: 'China', language: 'Mandarin'},
{name: 'France', language: 'French'}]
我正在尝试从中生成一个数组,这样如果任何国家/地区(名称)有多种语言,我会尝试将“很多”显示为语言属性。
在上面的例子中,结果数组应该如下所示
[{name: 'India', language: 'many'},
{name: 'US', language: 'many'},
{name: 'Japan', language: 'Japanese'},
{name: 'China', language: 'Mandarin'},
{name: 'France', language: 'French'},]
我尝试使用forEach循环,但没有得到如何实现这个逻辑。因为我是棱角分明2和打字稿的新手..你能不能建议。
答案 0 :(得分:1)
使用 forEach
var arr = [{name: 'India', language: 'Hindi'},
{name: 'US', language: 'English'},
{name: 'US', language: 'Spanish'},
{name: 'India', language: 'Bengali'},
{name: 'Japan', language: 'Japanese'},
{name: 'China', language: 'Mandarin'},
{name: 'France', language: 'French'}]
var out= []
arr.forEach((ele)=> {
var o = out.find(item => item.name === ele.name);
if (o!== undefined) o.language = 'many'
else out.push(ele)
})
答案 1 :(得分:0)
使用.reduce
var input = [{name: 'India', language: 'Hindi'},
{name: 'US', language: 'English'},
{name: 'US', language: 'Spanish'},
{name: 'India', language: 'Bengali'},
{name: 'Japan', language: 'Japanese'},
{name: 'China', language: 'Mandarin'},
{name: 'France', language: 'French'}];
var result = input.reduce( function (p,c){
// find an item in the result with the same name
var index = p.findIndex(function(x){ return x.name == c.name});
if(index == -1){
// if not found already add to the result list
p.push(c);
}
else{
// item with same name already exists - update the language to 'many'
p[index].language = 'many';
}
return p;
}, []);
console.log(result);