1

私はJSのObjectsにかなり慣れていないので、助けが必要です。私は次の配列を持っています:

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]] = [];

反復ごとに実行され、Array1 つの要素を追加する前にそれぞれを空にリセットします。設定する前に条件が必要です:

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 に答える