3 回答

TA貢獻1858條經驗 獲得超8個贊
我開始知道我們不能根據值對 js 對象鍵進行排序,因為鍵的順序每次都是隨機的。
這不是真的(它不是隨機的,而且每次都不同),但是對 JavaScript對象進行排序幾乎從來沒有用。
您有多種選擇來獲取您顯示的數組。一個簡單的方法是使用Object.entries獲取一組[key, value]數組,然后sort通過map以下方式從中獲取鍵:
const obj = {'a':20,'b':6,'c':21,'d':12};
const keys = Object.entries(obj)
.sort(([k1, v1], [k2, v2]) => v2 - v1)
.map(([k, v]) => k);
console.log(keys);
Object.entries 相對較新,但如果需要,很容易填充。
如果您在 ES5 中需要它(使用Object.entriespolyfill):
var obj = {'a':20,'b':6,'c':21,'d':12};
var keys = Object.entries(obj)
.sort(function(e1, e2) {
return e2[1] - e1[1];
})
.map(function(e) {
return e[0];
});
console.log(keys);
在評論中,您還詢問了如何將值放在單獨的數組中。您可以map通過推入它來構建該值數組作為副作用,如下所示:
const obj = {'a':20,'b':6,'c':21,'d':12};
const values = [];
const keys = Object.entries(obj)
.sort(([k1, v1], [k2, v2]) => v2 - v1)
.map(([k, v]) => {
values.push(v);
return k;
});
console.log(keys);
console.log(values);
...或者如果使用map副作用困擾您(這通常不是最佳實踐),只需使用forEach(或for-of) 代替:
const obj = {'a':20,'b':6,'c':21,'d':12};
const keys = [];
const values = [];
Object.entries(obj)
.sort(([k1, v1], [k2, v2]) => v2 - v1)
.forEach(([k, v]) => {
keys.push(k);
values.push(v);
});
console.log(keys);
console.log(values);
該for-of版本:
const obj = {'a':20,'b':6,'c':21,'d':12};
const keys = [];
const values = [];
for (const [k, v] of Object.entries(obj).sort(([k1, v1], [k2, v2]) => v2 - v1)) {
keys.push(k);
values.push(v);
}
console.log(keys);
console.log(values);
(您可以對 的結果使用臨時變量.sort
,然后使用for (const [k, v] of theTemporaryVariable) {
。)

TA貢獻1829條經驗 獲得超13個贊
const obj = {'a':20,'b':6,'c':21,'d':12};
const result = Object.keys(obj)
.reduce((acc, key) => {
const value = obj[key];
acc.push({ key, value });
acc.sort((a, b) => b.value - a.value);
return acc;
}, []);
console.log(result);
輸出
[
{ key: 'c', value: 21 },
{ key: 'a', value: 20 }
{ key: 'd', value: 12 }
{ key: 'b', value: 6 }
]

TA貢獻1829條經驗 獲得超9個贊
嘗試這個。
const list = {'a':20,'b':6,'c':21,'d':12};
let myObject = Object.fromEntries(Object.entries(list).sort( (a,b) => b[1] - a[1] ));
Object.prototype.mySplit = function() {
return Object.keys(this).map((key) => {
return {
key: key,
value: this[key]
};
});
}
let keys = [];
let values = [];
let properties = myObject.mySplit();
for (var i = 0; i < properties.length; i++) {
keys.push(properties[i]['key']);
values.push(properties[i]['value']);
}
console.log(keys);
console.log(values);
添加回答
舉報