我有一个数据数组如下:
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
}];
我想创建一个对象数组,我只想使用上面数组中国家的唯一数据。在这种情况下,我应该得到类似的东西:
var country = [
{ AUS: "" },
{ Eng :"" },
{ Ind : "" },
{ Russia :"" }
];
然后我可以添加我自己的attrbuites,如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]);
}, {});
我被困在这里。
答案 0 :(得分:3)
您可以使用接受回调提供的功能的map
方法。
另外,使用Set
ES6
功能以删除重复项。
Set
对象可让您存储任何类型的unique
个值,无论primitive
值还是object
引用。
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 }];
arr=[...new Set(arr.map(function(item){
return item.Country;
}))].map(function(item){
return {[item]:""};
});
console.log(arr);

另一种解决方案是使用arrow
函数。
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 }];
arr=[...new Set(arr.map(a => a.Country))].map(a=> ({[a] : ""}));
console.log(arr);

答案 1 :(得分:2)
最好使用object而不是array来存储结果(这样可以自动跳过重复项):
const result = {};
array.forEach(o => {
result[o.Country] = {
[o.Country]: '',
capital: '',
};
});
这将返回如下内容:
{
AUS: {AUS: "", capital: ""},
Eng: {Eng: "", capital: ""},
Ind: {Ind: "", capital: ""},
Russia: {Russia: "", capital: ""}
}
这取决于您真正想要如何使用结果。
答案 2 :(得分:2)
您可以使用Set
删除重复项,然后再使用map()
来删除对象。
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}]
var r = [...new Set(arr.map(({Country}) => Country))].map(e => ({[e]: ''}))
console.log(r)
答案 3 :(得分:2)
你可以做到
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
}];
let result = arr.map(e => e.Country);
result = result.filter((e, i) => result.indexOf(e) == i).reduce((a, b) => {
let obj = {};
obj[b] = "";
a.push(obj);
return a;
}, []);;
console.log(result);