javascript - 通过对象属性识别对象数组

标签 javascript arrays node.js oop

我的问题:

我有一个这样的对象数组

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/

相关文章:

javascript - 正则表达式 - new RegExp() 全局搜索/替换字符串

javascript - 如何使用 Expo 在 React-Native 应用程序上顺序运行异步函数

javascript - 将 HTTP 基本身份验证 header 添加到 Backbone.js 同步功能可防止模型在保存时更新()

c - 如何在 C 中比较两个二维数组?

c - 如何将数组的所有元素设置为零或任何相同的值?

javascript - Bootstrap Validator 验证数字范围

javascript - Axios GET 请求不起作用

javascript - 使用 mongoose 对子文档数组进行复杂添加

node.js - Sinon错误尝试包装已经包装的函数

c - Linux POSIX C 动态字符串数组问题