我有一個物件(不是陣列):
var people = {};
people['Zanny'] = {date: 447, last: 'Smith'};
people['Nancy'] = {date: 947, last: 'William'};
people['Jen'] = {date: 147, last: 'Roberts'};
與這個通用排序問題不同,我需要指定要排序的子鍵值,在這種情況下:date. 為了簡單起見,我洗掉了日期的前七位數字,因為這并不重要。
排序后,物件應date按鍵的值排序,如下所示:
people['Jen'] = {date: 147, last: 'Roberts'};//147 is the lowest/first value.
people['Zanny'] = {date: 447, last: 'Smith'};
people['Nancy'] = {date: 947, last: 'William'};//947 is the highest/last value.
我需要創建一個具有兩個明顯引數的可重用非匿名命名函式object:和key排序所基于的值。我一直在花一些時間嘗試以下方法但沒有任何成功:
function array_sort_by_values(o, k)
{
return Object.entries(o).sort().reduce(function (result, key)
{
//console.log(result,key);
result[key][k] = o[key][k]; return result;
}, {});
}
- 我不能將
o.sort其用于陣列型別(即使 JavaScript 聲稱一切都是物件并且“陣列”不存在)。 - 我不能過分強調我必須能夠指定鍵的名稱,因為我需要使用這種排序形式來處理一些不同的事情。我在這里缺少什么?
- 絕對沒有框架或庫。
uj5u.com熱心網友回復:
如何將物件轉換為陣列以進行排序并轉換回來?
var people = {};
people['Zanny'] = {date: 447, last: 'Smith'};
people['Nancy'] = {date: 947, last: 'William'};
people['Jen'] = {date: 147, last: 'Roberts'};
console.log(Object.fromEntries(Object.entries(people).sort((a,b) => {
return a[1].date - b[1].date
})))
var people = {};
people['Zanny'] = {date: 447, last: 'Smith'};
people['Nancy'] = {date: 947, last: 'William'};
people['Jen'] = {date: 147, last: 'Roberts'};
console.log(Object.fromEntries(Object.entries(people).sort(([,a],[,b]) => {
return a.date - b.date
})))
作為命名函式:
function array_sort_by_values(o, k)
{
return Object.fromEntries(Object.entries(o).sort((a,b) => {return a[1][k] - b[1][k]}));
}
console.log(array_sort_by_values(people, 'date'));
console.log(array_sort_by_values(people, 'last'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/451099.html
標籤:javascript 排序 目的
上一篇:如何在匯編中列印多個變數?
