我在JS中的对象中很新,所以我需要一些帮助。我有以下数组:
var persons = [
{ fname : 'Steven', lname : 'Jameson', age : 20 },
{ fname : 'George', lname : 'Thrump', age : 40 },
{ fname : 'Peter', lname : 'Jacobs', age : 60 },
{ fname : 'Peter', lname : 'Thrump', age : 20 },
{ fname : 'Steven', lname : 'Henderson', age : 40 },
{ fname : 'John', lname : 'Jacobs', age : 30 },
{ fname : 'Steven', lname : 'Thrump', age : 50 },
{ fname : 'George', lname : 'Peterson', age : 40 },
{ fname : 'Peter', lname : 'Jameson', age : 60 }
];
我需要按给定的属性对信息进行排序。我试过function( array, 'property' )
。就我而言,它将是function(persons, 'fname')
。我必须使用不同的名称来创建一个Object,并使用该键来存储有关该名称的每个人的信息。例如:
Object {
Steven : everyone with first name Steven,
George : everyone with first name George,
Peter : everyone with first name Peter,
John : everyone with first name John
}
我实现了这个目标:
function group( array, property ) {
var object = {};
for (var i = 0; i < persons.length; i++) {
object[persons[i][property]] = [];
object[persons[i][property]].push(persons[i])
};
};
使用不同的名称作为键创建对象,并将Array作为值。然后我被困住了,不知道接下来该做什么?有人可以提供帮助,如果他有一点时间可以解释一下。
提前致谢。
答案 0 :(得分:4)
唯一的问题似乎是这一行:
object[persons[i][property]] = [];
它在每次迭代时执行,在添加1个元素之前将每个Array
重置为空。在设置之前只需要一个条件:
if (!(persons[i][property] in object))
object[persons[i][property] = [];
object[persons[i][property].push(persons[i]);
答案 1 :(得分:1)
您应该检查object[persons[i][property]]
是否已初始化
function group( persons, property ) {
var object = {};
for (var i = 0; i < persons.length; i++) {
if(!object[persons[i][property]]) {
object[persons[i][property]] = [];
}
object[persons[i][property]].push(persons[i])
};
return object;
};
答案 2 :(得分:0)
function group(array, property) {
var object = {};
for (var i = 0; i < array.length; i++) {
var person = array[i];
if (person[property]) {
object[person[property]] = object[person[property]] || [];
object[person[property]].push(person);
}
};
return object;
};
group(persons, "fname");