如何在JavaScript中对键值对使用Object.enteries后获取密钥



我有如下JSON,我需要根据值对其进行排序:

{
'624d386f0f93e20d7bbf2654': 0.5586700439453125,
'624d87b30f93e20d7bbf5e49': 0.5463325321674346,
'624d89900f93e20d7bbf60d4': 0.37492166757583617,
'624d8b0b0f93e20d7bbf63c0': 0.45542603731155396,
'624d8bba0f93e20d7bbf65a1': 0.5411771833896637,
'624d8cc60f93e20d7bbf691c': 0.3993324667215347,
'624d8dab0f93e20d7bbf6ca4': 0.5388050019741059,
'624d90340f93e20d7bbf77de': 0.458124116063118,
'624d91cb0f93e20d7bbf8051': 0.5944154441356658,
'624d9f93dc568b4a14f10c9b': 0.48740254938602445,
'624da0e8dc568b4a14f10cab': 0.533133989572525,
'624da29edc568b4a14f10cc5': 0.4393773108720779,
'624da349dc568b4a14f10cd4': 0.5998590171337128,
'624da670dc568b4a14f10ce6': 0.6130651950836181,
'624da770dc568b4a14f10cfe': 0.6193588376045227,
'624da808dc568b4a14f10d0b': 0.4232172936201095,
'624da8b2dc568b4a14f10d1c': 0.44166545867919915,
'624e72c60f93e20d7bbfbd2f': 0.960582548379898,
'62553282501721a63bbddbd3': 0.7791991174221038,
'62558525fcbec32d9e178a52': 0.8113727509975432
} 

如果我在上述数据上使用此功能:

Object.entries(response.data).sort((a,b) => b[1] - a[1]);

其中response.data由上述数组对象组成。

它对JSON进行排序,并给出以下结果:

[
[ '624e72c60f93e20d7bbfbd2f', 0.960582548379898 ],
[ '62558525fcbec32d9e178a52', 0.8113727509975432 ],
[ '62553282501721a63bbddbd3', 0.7791991174221038 ],
[ '624da770dc568b4a14f10cfe', 0.6193588376045227 ],
[ '624da670dc568b4a14f10ce6', 0.6130651950836181 ],
[ '624da349dc568b4a14f10cd4', 0.5998590171337128 ],
[ '624d91cb0f93e20d7bbf8051', 0.5944154441356658 ],
[ '624d386f0f93e20d7bbf2654', 0.5586700439453125 ],
[ '624d87b30f93e20d7bbf5e49', 0.5463325321674346 ],
[ '624d8bba0f93e20d7bbf65a1', 0.5411771833896637 ],
[ '624d8dab0f93e20d7bbf6ca4', 0.5388050019741059 ],
[ '624da0e8dc568b4a14f10cab', 0.533133989572525 ],
[ '624d9f93dc568b4a14f10c9b', 0.48740254938602445 ],
[ '624d90340f93e20d7bbf77de', 0.458124116063118 ],
[ '624d8b0b0f93e20d7bbf63c0', 0.45542603731155396 ],
[ '624da8b2dc568b4a14f10d1c', 0.44166545867919915 ],
[ '624da29edc568b4a14f10cc5', 0.4393773108720779 ],
[ '624da808dc568b4a14f10d0b', 0.4232172936201095 ],
[ '624d8cc60f93e20d7bbf691c', 0.3993324667215347 ],
[ '624d89900f93e20d7bbf60d4', 0.37492166757583617 ]
]

现在,当我记录Object.keys(返回值(时,它给出的是:

[
'0',  '1',  '2',  '3',  '4',
'5',  '6',  '7',  '8',  '9',
'10', '11', '12', '13', '14',
'15', '16', '17', '18', '19'
]

我现在怎样才能拿到钥匙?

您可以使用Array.prototype.reduce((方法或Array.prototype.map((方法将数组转换为单个键数组。

示例

const data = {
'624d386f0f93e20d7bbf2654': 0.5586700439453125,
'624d87b30f93e20d7bbf5e49': 0.5463325321674346,
'624d89900f93e20d7bbf60d4': 0.37492166757583617,
'624d8b0b0f93e20d7bbf63c0': 0.45542603731155396,
'624d8bba0f93e20d7bbf65a1': 0.5411771833896637,
'624d8cc60f93e20d7bbf691c': 0.3993324667215347,
'624d8dab0f93e20d7bbf6ca4': 0.5388050019741059,
'624d90340f93e20d7bbf77de': 0.458124116063118,
'624d91cb0f93e20d7bbf8051': 0.5944154441356658,
'624d9f93dc568b4a14f10c9b': 0.48740254938602445,
'624da0e8dc568b4a14f10cab': 0.533133989572525,
'624da29edc568b4a14f10cc5': 0.4393773108720779,
'624da349dc568b4a14f10cd4': 0.5998590171337128,
'624da670dc568b4a14f10ce6': 0.6130651950836181,
'624da770dc568b4a14f10cfe': 0.6193588376045227,
'624da808dc568b4a14f10d0b': 0.4232172936201095,
'624da8b2dc568b4a14f10d1c': 0.44166545867919915,
'624e72c60f93e20d7bbfbd2f': 0.960582548379898,
'62553282501721a63bbddbd3': 0.7791991174221038,
'62558525fcbec32d9e178a52': 0.8113727509975432
};
const sortedDataKeys = Object.entries(data)
/**
* Sort the data by value, resulting in an array of arrays;
*/
.sort((a, b) => b[1] - a[1])
/**
* Use the reduce() method to transform the sorted array of arrays into a single array of keys.
*
* MDN documentation on Array.prototype.reduce()
* ------------------------------------------------
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
* ------------------------------------------------
*/
.reduce((acc, [key]) => [...acc, key], []);
/**
* Or use the map() method to transform the sorted array of arrays into a single array of keys.
*
* MDN documentation on Array.prototype.map()
* ------------------------------------------------
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
* ------------------------------------------------
*/
// .map([key]) => key);
console.log(sortedDataKeys);

输出

[
'624e72c60f93e20d7bbfbd2f',
'62558525fcbec32d9e178a52',
'62553282501721a63bbddbd3',
'624da770dc568b4a14f10cfe',
'624da670dc568b4a14f10ce6',
'624da349dc568b4a14f10cd4',
'624d91cb0f93e20d7bbf8051',
'624d386f0f93e20d7bbf2654',
'624d87b30f93e20d7bbf5e49',
'624d8bba0f93e20d7bbf65a1',
'624d8dab0f93e20d7bbf6ca4',
'624da0e8dc568b4a14f10cab',
'624d9f93dc568b4a14f10c9b',
'624d90340f93e20d7bbf77de',
'624d8b0b0f93e20d7bbf63c0',
'624da8b2dc568b4a14f10d1c',
'624da29edc568b4a14f10cc5',
'624da808dc568b4a14f10d0b',
'624d8cc60f93e20d7bbf691c',
'624d89900f93e20d7bbf60d4'
]

如果我看对了,键/值对现在存储在一个数组中(在原始数组中(。假设数据存储在data中,您可以执行以下操作:

data.foreach(el => console.log(el[0]))

要获得一个包含所有键的数组,可以使用arrayreduce函数。

data.reduce(el => el[0])

最新更新