亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在按值排序的單獨數組中獲取值和鍵

在按值排序的單獨數組中獲取值和鍵

開心每一天1111 2021-12-02 15:35:38
假設我有一個對象 {'a':20,'b':6,'c':21,'d':12}按降序對值進行排序后,所需的輸出:Keys: ['c','a','d','b']和Values: [21,20,12,6]我怎樣才能有效地實現這一目標?我開始知道我們不能根據值對 js 對象鍵進行排序,因為鍵的順序每次都是隨機的。
查看完整描述

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) {。)


查看完整回答
反對 回復 2021-12-02
?
烙印99

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 }

]


查看完整回答
反對 回復 2021-12-02
?
PIPIONE

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);


查看完整回答
反對 回復 2021-12-02
  • 3 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號