我有类似的数据
var d = [{
"AD": {
"name": "Andorra",
"native": "Andorra",
"phone": "376",
"continent": "EU",
"capital": "Andorra la Vella",
"currency": "EUR",
}
}, {
"AE": {
"name": "United Arab Emirates",
"native": "دولة الإمارات العربية المتحدة",
"phone": "971",
"continent": "AS",
"capital": "Abu Dhabi",
"currency": "AED",
}
}, {
"AF": {
"name": "Afghanistan",
"native": "افغانستان",
"phone": "93",
"continent": "AS",
"capital": "Kabul",
"currency": "AFN",
}
}]
并且我想使用ES6高阶函数而不使用for或foreach来获取每个对象的名称。
我尝试过filter
和map
,但不知道何时使用什么
答案 0 :(得分:0)
您可以使用Array.prototype.reduce()
轻松实现以下目标:
var d = [{
"AD": {
"name": "Andorra",
"native": "Andorra",
"phone": "376",
"continent": "EU",
"capital": "Andorra la Vella",
"currency": "EUR",
}
}, {
"AE": {
"name": "United Arab Emirates",
"native": "دولة الإمارات العربية المتحدة",
"phone": "971",
"continent": "AS",
"capital": "Abu Dhabi",
"currency": "AED",
}
}, {
"AF": {
"name": "Afghanistan",
"native": "افغانستان",
"phone": "93",
"continent": "AS",
"capital": "Kabul",
"currency": "AFN",
}
}]
const names = d.reduce((acc, curr) => {
const keys = Object.keys(curr);
const name = curr[keys[0]].name;
acc.push(name)
return acc;
}, []);
console.log(names)
答案 1 :(得分:-1)
实现这一目标的简单方法对我来说:
var d = [{
"AD": {
"name": "Andorra",
"native": "Andorra",
"phone": "376",
"continent": "EU",
"capital": "Andorra la Vella",
"currency": "EUR",
}
}, {
"AE": {
"name": "United Arab Emirates",
"native": "دولة الإمارات العربية المتحدة",
"phone": "971",
"continent": "AS",
"capital": "Abu Dhabi",
"currency": "AED",
}
}, {
"AF": {
"name": "Afghanistan",
"native": "افغانستان",
"phone": "93",
"continent": "AS",
"capital": "Kabul",
"currency": "AFN",
}
}]
d.map(item => {
console.log(Object.keys(item));
})
答案 2 :(得分:-1)
如果每个对象只有一个键(AD,AE,AF ...),则可以使用类似的方法:
const d = [{
AD: {
name: 'Andorra',
}
}, {
AE: {
name: 'United Arab Emirates',
}
}, {
AF: {
name: 'Afghanistan',
},
}];
const reduced = d.map(x => x[Object.keys(x)[0]].name);
console.log(reduced);
如果可以有多个键(例如,AD,AE等),则可以使用:
const d = [{
AD: {
name: 'Andorra',
},
DF: {
name: 'Paris',
},
}, {
AF: {
name: 'Afghanistan',
},
}];
const reduced = d.reduce((tmp, x) => [
...tmp,
...Object.values(x).map(y => y.name),
], []);
console.log(reduced);