Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按对象属性标识对象数组_Javascript_Arrays_Node.js_Oop - Fatal编程技术网

Javascript 按对象属性标识对象数组

Javascript 按对象属性标识对象数组,javascript,arrays,node.js,oop,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:

我的问题:

我有一个这样的对象数组

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属性都是唯一的]。但是,它们不是按任何特定模式排序的。因此,人[0]可能等于或不等于“名称”为“Dan”的对象

我希望能够通过组织数据来访问数据,以便

people.Dan 
返回对象

{age: '20', favoriteColor: 'blue'}
我觉得这应该是相对简单的,但我真的不知道用什么词来描述这个问题,以便能够找到合适的解决方案


编辑:对于将来阅读本文的人,我决定使用Elliot的解决方案,而不是使用下划线.js。它们都解决了这个问题,但仅仅实现另一个功能就更容易了

现在
people
是一个数组。您需要将其重组为一个对象,其中每个名称都是返回该对象其余部分的属性。有一种方法可以做到这一点:

var tempPeople = {};
for(var i = 0, len = people.length; i<len; i++) {
    tempPeople[people[i].name] = people[i];
}

people = tempPeople;

现在
people
是一个数组。您需要将其重组为一个对象,其中每个名称都是返回该对象其余部分的属性。有一种方法可以做到这一点:

var tempPeople = {};
for(var i = 0, len = people.length; i<len; i++) {
    tempPeople[people[i].name] = people[i];
}

people = tempPeople;

现在
people
是一个数组。您需要将其重组为一个对象,其中每个名称都是返回该对象其余部分的属性。有一种方法可以做到这一点:

var tempPeople = {};
for(var i = 0, len = people.length; i<len; i++) {
    tempPeople[people[i].name] = people[i];
}

people = tempPeople;

现在
people
是一个数组。您需要将其重组为一个对象,其中每个名称都是返回该对象其余部分的属性。有一种方法可以做到这一点:

var tempPeople = {};
for(var i = 0, len = people.length; i<len; i++) {
    tempPeople[people[i].name] = people[i];
}

people = tempPeople;
你应该使用或。他们有一个名为findWhere的方法,它完全满足您的需要。如果存在多个匹配对象,则方法u0.where将返回一个数组

_.findWhere(people, {name: "dan"});
// will return
// {name: 'Dan', age: '20', favoriteColor: 'blue'}
你应该使用或。他们有一个名为findWhere的方法,它完全满足您的需要。如果存在多个匹配对象,则方法u0.where将返回一个数组

_.findWhere(people, {name: "dan"});
// will return
// {name: 'Dan', age: '20', favoriteColor: 'blue'}
你应该使用或。他们有一个名为findWhere的方法,它完全满足您的需要。如果存在多个匹配对象,则方法u0.where将返回一个数组

_.findWhere(people, {name: "dan"});
// will return
// {name: 'Dan', age: '20', favoriteColor: 'blue'}
你应该使用或。他们有一个名为findWhere的方法,它完全满足您的需要。如果存在多个匹配对象,则方法u0.where将返回一个数组

_.findWhere(people, {name: "dan"});
// will return
// {name: 'Dan', age: '20', favoriteColor: 'blue'}

创建一个对象构造函数。编写一个自定义方法

function person(name,age,favoriteColor) {
    this.name = name;
    this.age = age;
    this.favoriteColor = favoriteColor;
    this.getInfo = function() {
        return this.age + " - " + this.favoriteColor;
    }
}

var people = [];

people.push(new person('dan','20','blue'));

alert(people[0].getInfo());

创建一个对象构造函数。编写一个自定义方法

function person(name,age,favoriteColor) {
    this.name = name;
    this.age = age;
    this.favoriteColor = favoriteColor;
    this.getInfo = function() {
        return this.age + " - " + this.favoriteColor;
    }
}

var people = [];

people.push(new person('dan','20','blue'));

alert(people[0].getInfo());

创建一个对象构造函数。编写一个自定义方法

function person(name,age,favoriteColor) {
    this.name = name;
    this.age = age;
    this.favoriteColor = favoriteColor;
    this.getInfo = function() {
        return this.age + " - " + this.favoriteColor;
    }
}

var people = [];

people.push(new person('dan','20','blue'));

alert(people[0].getInfo());

创建一个对象构造函数。编写一个自定义方法

function person(name,age,favoriteColor) {
    this.name = name;
    this.age = age;
    this.favoriteColor = favoriteColor;
    this.getInfo = function() {
        return this.age + " - " + this.favoriteColor;
    }
}

var people = [];

people.push(new person('dan','20','blue'));

alert(people[0].getInfo());


建议使用一个函数包含整个库通常是不好的。此外,OP正在使用Node.js,让下划线使用Node可能会很痛苦。@ElliotBonneville我不同意,首先,lodash在Node中非常容易使用,其次,这些是非常有用的小型实用程序库。如果OP没有一个实用程序带库可以满足他的要求,他应该这样做。我从来没有使用过underline.js,但我从网上使用过它/写过它的人那里听到了很多积极的反馈。不确定我是否应该走这条路,只是为了检查它,即使Elliot Bonneville提供的解决方案看起来也很可靠……好吧,@Dan,我绝对不会阻止你检查下划线和/或lodash。它们都是有用的库,你可以从中获得很多好处。但是,如果你从他们中的一个那里复制
findWhere
,看看它是如何工作的,你可能会直接学到更多(你可能会发现它与我提供的解决方案类似)。Elliot的解决方案很好,但你需要对其进行抽象,以便代码可以在许多情况下使用,无论何时你需要这样做,你可以自己做,也可以只使用一个库。建议使用一个函数包含整个库通常是不好的。此外,OP正在使用Node.js,让下划线使用Node可能会很痛苦。@ElliotBonneville我不同意,首先,lodash在Node中非常容易使用,其次,这些是非常有用的小型实用程序库。如果OP没有一个实用程序带库可以满足他的要求,他应该这样做。我从来没有使用过underline.js,但我从网上使用过它/写过它的人那里听到了很多积极的反馈。不确定我是否应该走这条路,只是为了检查它,即使Elliot Bonneville提供的解决方案看起来也很可靠……好吧,@Dan,我绝对不会阻止你检查下划线和/或lodash。它们都是有用的库,你可以从中获得很多好处。但是,如果你从他们中的一个那里复制
findWhere
,看看它是如何工作的,你可能会直接学到更多(你可能会发现它与我提供的解决方案类似)。Elliot的解决方案很好,但你需要对其进行抽象,以便代码可以在许多情况下使用,无论何时你需要这样做,你可以自己做,也可以只使用一个库。建议使用一个函数包含整个库通常是不好的。此外,OP正在使用Node.js,让下划线使用Node可能会很痛苦。@ElliotBonneville我不同意,首先,lodash在Node中非常容易使用,其次,这些是非常有用的小型实用程序库。如果OP没有一个实用程序带库可以满足他的要求,他应该这样做。我从来没有使用过underline.js,但我从网上使用过它/写过它的人那里听到了很多积极的反馈。不确定我是否应该走这条路,只是为了检查它,即使Elliot Bonneville提供的解决方案看起来也很可靠……好吧,@Dan,我绝对不会阻止你检查下划线和/或lodash。它们都是有用的图书馆和图书馆