簡體   English   中英

如何在Javascript中對關聯數組進行排序?

[英]How to sort associative array in Javascript?

我需要通過JS為我的一個項目排序關聯數組。 我發現這個函數在firefox中運行得很好,但不幸的是它在IE8,OPERA,CHROME中無法工作......無法找到使其在其他瀏覽器中工作的方法,或者找到適合其目的的另一個函數。 我非常感謝任何幫助。

function sortAssoc(aInput)
{
    var aTemp = [];
    for (var sKey in aInput) aTemp.push([sKey, aInput[sKey].length]);
    aTemp.sort(function () {return arguments[0][1] < arguments[1][1]});
    var aOutput = new Object();
    //for (var nIndex = aTemp.length-1; nIndex >=0; nIndex--)
    for (var nIndex = 0; nIndex <= aTemp.length-1; nIndex++)
        aOutput[aTemp[nIndex][0]] = aInput[aTemp[nIndex][0]];
    //aOutput[aTemp[nIndex][0]] = aTemp[nIndex][1];
    return aOutput;
}

這是不可能的。 JavaScript中的Object (您正在使用的“關聯數組”)被指定為在使用for...in循環迭代其屬性時沒有定義的順序 您可能能夠在某些瀏覽器的行為之間觀察到一些共同點,但它並不普遍

簡介:如果您需要特定順序的對象,請使用數組。

我知道這是一個老帖子但是工作:

問題是

aTemp.sort(function () {return arguments[0][1] < arguments[1][1]});

因為sort函數出現一個數字:

aTemp.sort(function (a, b) {
    if (a[1] < b[1])
        return 1;
    else if (a[1] > b[1])
        return -1;
    else
        return 0;
});

我最近遇到了這個問題,發現了這個問題。 我很失望地發現沒有預先定義的方法來對關聯數組進行排序,但它有意義並指出了我正確的方向。 我沒有完全意識到JS關聯數組實際上是對象,只是名稱中的數組。 我有一個包含更多關聯數組的關聯數組,例如:

var firstChild = {'id': 0, 'name': 'company Two'};
var secondChild = {'id': 1, 'name': 'company One'};
var parent = {
    'company Two': firstChild,
    'company One': secondChild
};

以下函數將根據它的鍵對上面的父數組進行排序。 為了使其按寫入方式工作,父數組需要與關聯數組中的值匹配的鍵。 例如,parent ['unique string']將需要一些包含'unique string'值的鍵值。 就我而言,這是名稱密鑰; 但是,您可以選擇任何您喜歡的鍵。

function associativeSort(givenArray, keyToSort) {
    var results = [];

    var temp = [];
    for(var key in givenArray) {
        temp.push(givenArray[key].name);
    }
    temp = temp.sort();
    for(var x = 0; x < temp.length; x++) {
        results[x] = givenArray[temp[x]];
    }

    return results;
}

給定我的示例數組,此函數將返回:

var parent = {
    'company One': {'id': 1, 'name': 'company One'},
    'company Two': {'id': 0, 'name': 'company Two'}
};

這是一個簡單的解決方案,但我花了一段時間才想到。 希望這有助於其他人面對這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM