1

我在 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 {
    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])
        };
    };

创建具有不同名称的对象作为键,并赋予它们数组作为值。然后我被卡住了,不知道下一步该怎么做?有人可以帮忙吗,如果他有几分钟的时间来解释一下。

提前致谢。

4

3 回答 3

4

唯一的问题似乎是这一行:

object[persons[i][property]] = [];

它为每次迭代执行,在添加 1 个元素之前将每个迭代重置Array为空。在设置之前只需要一个条件:

if (!(persons[i][property] in object))
    object[persons[i][property] = [];

object[persons[i][property].push(persons[i]);
于 2013-03-20T20:33:36.673 回答
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;
};
于 2013-03-20T20:31:25.697 回答
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");
于 2013-03-20T20:37:04.737 回答