Javascript 如何从数组中筛选特定属性并存储到变量中
我有一系列数据,如下所示:Javascript 如何从数组中筛选特定属性并存储到变量中,javascript,arrays,data-structures,Javascript,Arrays,Data Structures,我有一系列数据,如下所示: var arr = [{ "Sports" : "Hockey", "Country" : "AUS", "Players" : 11 },{ "Sports" : "Football", "Country" : "Eng", "Players" : 11 },{ "Sports" : "Tennis", "Country" : "AUS", "Players" : 11 },{ "Spo
var arr = [{
"Sports" : "Hockey",
"Country" : "AUS",
"Players" : 11
},{
"Sports" : "Football",
"Country" : "Eng",
"Players" : 11
},{
"Sports" : "Tennis",
"Country" : "AUS",
"Players" : 11
},{
"Sports" : "Cricket",
"Country" : "Ind",
"Players" : 11
},{
"Sports" : "Gymnastic",
"Country" : "Russia",
"Players" : 11
},{
"Sports" : "Gym",
"Country" : "AUS",
"Players" : 11
}];
我想创建一个对象数组,其中我只想使用上面数组中国家的uniqe数据。在这种情况下,我应该得到如下结果:
var country = [
{ AUS: "" },
{ Eng :"" },
{ Ind : "" },
{ Russia :"" }
];
{
AUS: {AUS: "", capital: ""},
Eng: {Eng: "", capital: ""},
Ind: {Ind: "", capital: ""},
Russia: {Russia: "", capital: ""}
}
然后我可以添加自己的属性,如capital
:
var country = [{
AUS: "",
capital : "Canbara"
}, {
Eng :"",
capital : "London"
}, {
Ind : "",
capital : "Delhi"
}, {
Russia :"",
capital : "Masco"
}];
有谁能帮我解决这个问题吗
这就是我迄今为止所尝试的:
var result = [];
array.forEach(function(e) {
result.push(this[e.Country]);
}, {});
我被困在这里。最好使用对象而不是数组来存储结果(这样可以自动跳过重复项): 这将返回如下结果:
var country = [
{ AUS: "" },
{ Eng :"" },
{ Ind : "" },
{ Russia :"" }
];
{
AUS: {AUS: "", capital: ""},
Eng: {Eng: "", capital: ""},
Ind: {Ind: "", capital: ""},
Russia: {Russia: "", capital: ""}
}
这取决于您真正想要如何使用结果 您可以使用
map
方法,该方法接受回调提供的函数
另外,使用Set
ES6
功能删除重复项
集合
对象允许您存储任何类型的唯一
值,无论是原语
值还是对象
引用
var arr=[{“体育”:“曲棍球”,“国家”:“澳大利亚”,“球员”:11},{“体育”:“足球”,“国家”:“英语”,“球员”:11},{“体育”:“网球”,“国家”:“澳大利亚”,“球员”:11},{“体育”:“板球”,“国家”:“印度”,“球员”:11},{“体育”:“俄罗斯”,“球员”:11},{“体育”:“健身房”,“国家”:“澳大利亚”,“球员”:11}];
arr=[…新集合(arr.map)(函数(项){
返回项目。国家/地区;
}))].map(功能(项目){
返回{[项目]:“”};
});
控制台日志(arr)
您可以使用Set
删除重复项,然后再次使用map()
获取对象
var arr=[{“体育”:“曲棍球”,“国家”:“澳大利亚”,“球员”:11},{“体育”:“足球”,“国家”:“英格兰”,“球员”:11},{“体育”:“网球”,“国家”:“澳大利亚”,“球员”:11},{“体育”:“板球”,“国家”:“印度”,“球员”:11},{“体操”,“国家”:“俄罗斯”,“球员”:11},{“体育”:“健身房”,“国家”:“澳大利亚”,“球员”:11}]
var r=[…新集合(arr.map(({Country})=>Country))].map(e=>({[e]:''}))
console.log(r)
您可以执行以下操作
var-arr=[{
“运动”:“曲棍球”,
“国家”:“澳大利亚”,
“玩家”:11
},{
“体育”:“足球”,
“国家”:“英语”,
“玩家”:11
},{
“体育”:“网球”,
“国家”:“澳大利亚”,
“玩家”:11
},{
“运动”:“板球”,
“国家”:“工业”,
“玩家”:11
},{
“体育”:“体操”,
“国家”:“俄罗斯”,
“玩家”:11
},{
“运动”:“健身房”,
“国家”:“澳大利亚”,
“玩家”:11
}];
让结果=arr.map(e=>e.Country);
result=result.filter((e,i)=>result.indexOf(e)==i)。reduce((a,b)=>{
设obj={};
obj[b]=“”;
a、 推(obj);
返回a;
}, []);;
控制台日志(结果)代码>如何使用结果数组?我认为对象{Ind:'drish'}
可能更好。为什么希望对象的country
数组中的键是国家名称?如果有一个像name
这样的一致键,并且值是国家名称,不是更好吗?谢谢您的回答,但在这种情况下,AUS
正在重复。我只想要一个。(不重复)@David,现在看看。谢谢,让我试试这个。既然你给出了两个答案。谢谢,是否可以将所有uniqe国家/地区放入阵列中。比如arr2=[AUS,IND,ENG,RASSIA]是的,我知道了。非常感谢:)