簡體   English   中英

Javascript根據另一個數組通過鍵對對象排序?

[英]Javascript sort an object by keys based on another Array?

如何基於Javascript中的另一個數組通過鍵對對象排序?

這與這里的問題相同。PHP根據另一個數組通過鍵對數組進行排序?

但是我需要使用與Javascript相同的過程。

謝謝

JavaScript規范不要求對象鍵保持其順序,因此嘗試對它們進行排序並不安全。 實施標准取決於每種環境,每種瀏覽器的執行方式也不同。 我相信大多數現代瀏覽器都會按照先進先出的順序對鍵進行排序,但是由於它不是標准的一部分,因此在生產代碼中信任它並不安全。 在較舊的瀏覽器中也可能會中斷。 最好的選擇是將對象鍵放入一個數組中,對該數組進行排序,然后通過排序后的鍵訪問該對象的值。

var myObject = { d: 3, b: 1, a: 0, c: 2 },
    sortedKeys = Object.getOwnPropertyNames(myObject).sort();

然后,可以根據需要將有序值映射到新數組中。

var orderedValues = sortedKeys.map(function (key) { return myObject[key]; });

正如QED2000指出的那樣,即使您創建一個新對象,也無法保證這些屬性將保持特定順序。 但是,您可以根據不同的數組對鍵進行排序。

<script>
    function sortArrayByArray(a, b)
    {
        return order.indexOf(a) - order.indexOf(b);
    }
    var order = new Array('name', 'dob', 'address');
    var customer = new Array();
    customer['address'] = '123 fake st';
    customer['name'] = 'Tim';
    customer['dob'] = '12/08/1986';
    customer['dontSortMe'] = 'this value doesnt need to be sorted';
    var orderedKeys = Object.keys(customer).sort(sortArrayByArray);
    orderedKeys.forEach(function (key) {
        document.write(key + "=" + customer[key] + "<br/>");
    });
</script> 

輸出是

dontSortMe=this value doesnt need to be sorted
name=Tim
dob=12/08/1986
address=123 fake st

暫無
暫無

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

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