簡體   English   中英

按數組屬性的長度對 JavaScript 對象進行排序

[英]Sort JavaScript object by length of array properties

我有一個這樣的對象:

var list = {
  "you": [100,200,300], 
  "me": [75,4,5,6,8,9], 
  "foo": [116,345,1,23,56,78], 
  "bar": [15,34]
};

有沒有辦法按數組屬性的長度sort這個對象進行sort

預期輸出:

var res =  [[116,345,1,23,56,78],[75,4,5,6,8,9],[100,200,300],[15,34]]

我嘗試使用 lodash 的sortby函數。

 var data = { "abc": ["20288", "d8f0", "4a5d", "1a8a0"], "kkl": ["bnb", "lll", "zxc"], "F17": ["ee547", "42e9"], "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"] } var res = _.sortBy(data, function(val) { return parseInt(val.length); }); console.log(res);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

  1. 如果您希望輸出為已排序數組值的數組:

    通過調用Object.values使用解構賦值從結果數組中獲取length屬性,然后按降序對其進行排序。

 const data = { "abc": ["20288", "d8f0", "4a5d", "1a8a0"], "kkl": ["bnb", "lll", "zxc"], "F17": ["ee547", "42e9"], "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"] }; const res = Object.values(data).sort(({length:a}, {length:b}) => b - a); console.log(res);


  1. 如果您想通過根據數組值的長度重新排列鍵來對對象本身進行排序。

    有沒有辦法按數組屬性的長度對這個對象進行排序?

    如果您想根據數組值的length重新排列原始對象屬性,那么我們首先需要按鍵排序,然后使用Array.reduce以鍵的排序順序創建一個對象

 const data = { "abc": ["20288", "d8f0", "4a5d", "1a8a0"], "kkl": ["bnb", "lll", "zxc"], "F17": ["ee547", "42e9"], "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"] }; //sorting in descending order const obj = Object.keys(data) .sort((a, b) => data[b].length - data[a].length ) .reduce((acc, ele) => { acc[ele] = data[ele]; return acc; }, {}); console.log(obj);

您可以使用Object.values()獲取數組中的值,然后根據length對生成的二維數組進行sort ,如下所示:

 var data = { "abc": ["20288", "d8f0", "4a5d", "1a8a0"], "kkl": ["bnb", "lll", "zxc"], "F17": ["ee547", "42e9"], "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"] } const res = Object.values(data).sort((a, b) => b.length - a.length) console.log(res)

暫無
暫無

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

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