1

私は次の json abjects を持っており、それらを 1 つのオブジェクトにマージし、「分」値に基づいて短いサブオブジェクトを作成したいと考えています。それは JavaScript で可能ですか?

[Object, Object, Object]
    0: Object
        Live: "188585"
        Minute: "17"
        Player: "Player A"
        Team: "188564"
        __proto__: Object
    1: Object
        Live: "188585"
        Minute: "26"
        Player: "Player B"
        Team: "188564"
        __proto__: Object
    2: Object
        Live: "188585"
        Minute: "77"
        Player: "Player A"
        Team: "188564"
        __proto__: Object
[Object, Object]
    0: Object
        Live: "188585"
        Minute: "31"
        Player: "Player C"
        Team: "188558"
        __proto__: Object
    1: Object
        Live: "188585"
        Minute: "41"
        Player: "Player D"
        Team: "188558"
        __proto__: Object

私はそのようになりたい結果:

[Object, Object, Object, Object, Object]
    0: Object
        Live: "188585"
        Minute: "17"
        Player: "Player A"
        Team: "188564"
        __proto__: Object
    1: Object
        Live: "188585"
        Minute: "26"
        Player: "Player B"
        Team: "188564"
        __proto__: Object
    2: Object
        Live: "188585"
        Minute: "31"
        Player: "Player C"
        Team: "188558"
        __proto__: Object
    3: Object
        Live: "188585"
        Minute: "41"
        Player: "Player D"
        Team: "188558"
        __proto__: Object
    4: Object
        Live: "188585"
        Minute: "77"
        Player: "Player A"
        Team: "188564"
        __proto__: Object
4

2 に答える 2

2

2つの配列がすでに分単位で並べ替えられている場合は、「従来の」マージアルゴリズムを使用できます。そうでない場合は、配列を連結し、Array.sort(特定の比較関数を使用)を使用して結果を並べ替えることができます。

編集:ここに例があります:

  1. 配列がソートされていない場合:

    var result = array1.concat(array2);
    result.sort(function(item1, item2) {
        return item1.Minute - item2.Minute;
    });
    
  2. 配列がソートされている場合、単純なマージ関数は次のとおりです。

    function merge(array1, array2) {
        var results = [];
        var i = 0, j = 0;
        while (i < array1.length && j < array2.length) {
            if (array1[i].Minute <= array2[j].Minute) {
                results.push(array1[i];
                i++;
            }
            else {
                results.push(array2[j];
                j++;
            }
        }
        while (i < array1.length) {
            results.push(array1[i];
            i++;
        }
        while (j < array2.length) {
            results.push(array2[j];
            j++;
        }
        return results;
    }
    
于 2013-02-07T09:40:36.063 に答える
2

オブジェクトよりも、オブジェクトの配列のようです。その場合は、Array.concatを使用して連結し、Array.sortを使用して並べ替えることができます。

何かのようなもの:

// assuming `aba` is the first array, `cd` the second
var result = aba.concat(cd);

result.sort(function(a, b) {
    return a.Minute - b.Minute // implicit conversion in number
});

console.log(result);
于 2013-02-07T09:49:08.680 に答える