从数组ES6的对象获取特定值

时间:2018-09-21 12:35:31

标签: javascript arrays json node.js ecmascript-6

我有类似的数据

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来获取每个对象的名称。

我尝试过filtermap,但不知道何时使用什么

3 个答案:

答案 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);

相关问题