0

私はこの配列を持っていますが、保証された順序ではありません:

[ [2,1], [2,2], [2,3], [3,1], [3,2], [4,1], [4,2], [4,3], [4,4], [5,1], [5,2] ]

それを繰り返し、arr[0] の値が同じものを照合してから、arr[1] の値が最も高いものを削除する必要があります。最終的には次のようになります。

[ [2,1], [2,2], [3,1], [4,1], [4,2], [4,3], [5,1] ]

これを正確に反復する方法が正確にはわかりません。複雑なオブジェクトをフィルタリングしたり、1 次元配列から単一の値を削除したりする方法を見たほとんどの場所。

ここ数日で、配列の使用に本当に慣れてきました。助けてくれてありがとう!

4

3 に答える 3

0

優れたlodash.jsライブラリを利用する:

var ary = [ [2,1], [2,2], [2,3], [3,1], [3,2], [4,1], [4,2], [4,3], [4,4], [5,1], [5,2] ];

var results = _(ary)

    // Group by the first value
    .groupBy(function(pair) {
        return pair[0];
    })

    // Turn the groups into arrays
    .map(function(group) {

        // Sort by the second value
        var sorted = _.sortBy(group, function(pair) {
                return pair[1];
            });

        // Keep all but the highest value
        return _.take(sorted, sorted.length-1);
    })

    // Remove the groupings
    .flatten(true)

    // Unwrap the results
    .value();

console.log(results);

jsFiddle: http://jsfiddle.net/dmillz/BhSDT/

それが役立つことを願っています!

于 2013-07-10T19:46:55.147 に答える