0

初めてのポスター、長年の読者。オブジェクトの配列の並べ替えに問題があります。これは宿題なので、誰かにコードを書いてもらうように頼んでいるわけではありません。正しい方向に向けるか、見落としを見せてください。オブジェクトは、配列とキーを渡すときにオブジェクトの配列をソートする関数を作成することです。

([{a:2},{b:2},{a:1},{a:3},{b:3},{b:1}], “a”)

戻るべき

[{a:1},{a:2},{a:3},{b:1},{b:2},{b:3}];

underscore.js や node.js などは使用できません

    //example array to use
    var testarr = [{a:2},{b:2},{a:1},{a:3},{b:3},{b:1}];
    console.log("array sort test: should look like [{a:1},{a:2},{a:3},{b:1},{b:2},{b:3}]");

    //first attempt 
    var sortArrayByKey = function (arr1, key) {
            (arr1.sort(function(a,b){
            return a[key] - b[key];}));
            return arr1;
    };
    //still only returns testarr
    console.log(sortArrayByKey(testarr, "a") );

    //second attempt
    var sortArrayByKey1 = function (array, key) {
    var compareByKey = function (a, b) {
            var x = a[key]; var y = b[key];
            return x - y;
    }
    array.sort(compareByKey);        
    return array;
    };
    //still only returns testarr
    console.log(sortArrayByKey1(testarr, “a”));

![要件の写真 - 間違った写真を説明している場合に備えて

4

5 に答える 5

1

うーん..これは奇妙なものです。まず、キーの 1 つが優先キーであるかどうかを確認し、それに基づいて並べ替える必要があります。次に、両方のキーが等しい場合は、値で並べ替えます。問題は、キーを取得する簡単な方法がないことですが、for .. inループを使用することはできます。

各オブジェクトにはプロパティが 1 つだけ含まれていると仮定します。そうしないと、プロパティはオブジェクト内で順序付けされていないため、コードは意味をなさないでしょう。

function sortPreferredKey(arr,key) {
    arr.sort(function(a,b){
        // get the keys of each object
        for (var a_key in a) {break}
        for (var b_key in b) {break}
        if (a_key != b_key) {
            if (a_key == key) return 1;
            else if (b_key == key) return -1;
            else return 0;
        }
        return a[a_key] - b[b_key];
    });
}

並べ替えの順序が間違っている可能性がありますが、あなたはその考えを理解しています。このようなことをする必要さえあるのは本当に奇妙です。

于 2013-10-24T02:19:09.567 に答える
0

これは私が思いつくことができる最高のものです。指定されたキーを持つすべての要素を前面に並べ替えます。キーのない要素は後ろにありますが、予測できない順序になります。

function sortArrayByKey(arr, key) {
    function compareKey(a, b) {
        if (a.hasOwnProperty(key)) {
            if (b.hasOwnProperty(key)) {
                return a[key] - b[key];
            } else {
                return -1;
            }
        } else if (b.hasOwnProperty(key)) {
            return 1;
        } else {
            return 0;
        }
    }
    arr.sort(compareKey);
    return arr;
}
于 2013-10-24T02:20:24.410 に答える