我的问题:
我有一个这样的对象数组
var people = [
{name: 'Dan' , age: '20', favoriteColor : 'blue'},
{name: 'Bob' , age: '35', favoriteColor : 'red' },
{name: 'Frank', age: '22', favoriteColor : 'green'},
{name: 'Ed' , age: '27', favoriteColor : 'yellow'}
]
我需要能够通过名称属性来识别数组中的对象。 [需要注意的是,数组中每个对象的 name 属性都是唯一的]。但是,它们不按任何特定模式排序。因此,people[0] 可能等于也可能不等于“名称”为“Dan”的对象。
我希望能够通过组织数据来访问数据,以便
people.Dan
返回对象
{age: '20', favoriteColor: 'blue'}
我觉得这应该比较简单,但我真的不知道用什么词来描述这个问题才能找到正确的解决方案。
编辑:对于将来阅读本文的任何人,我决定采用 Elliot 的解决方案,而不是使用 underscore.js。它们都解决了问题,但最终实现另一个功能更容易。
最佳答案
现在 people
是一个数组。您需要将其重组为一个对象,其中每个名称都是一个返回该对象其余部分的属性。这是一种方法:
var tempPeople = {};
for(var i = 0, len = people.length; i<len; i++) {
tempPeople[people[i].name] = people[i];
}
people = tempPeople;
您还可以将 people
保留为数组,而使用 Array.filter
按名称选择:
var dan = people.filter(function(person) { return person.name == "Dan" })[0]; // returns the first person named Dan
关于javascript - 通过对象属性识别对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21463664/