Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从数组中筛选特定属性并存储到变量中_Javascript_Arrays_Data Structures - Fatal编程技术网

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]是的,我知道了。非常感谢:)