JS中对键值对数组按值排序后提取排序后的键
JS中对键值对数组按值排序后提取排序后的键
嗨,我来帮你搞定这个问题!你其实已经走对了大部分流程,只差最后一步提取键的操作啦~
首先,你的排序思路是对的,但有个小细节可以优化:Object.values(my_array)是多余的,因为my_array本身就是数组,直接调用.sort()方法就行。排序完成后,我们只需要用map()方法遍历排序后的数组,把每个子数组的第一个元素(也就是你需要的键)提取出来,就能得到想要的结果了。
给你完整的实现代码:
var my_array = [['line_1','2'],['line_2','3'],['line_3','5'],['line_4','1'],['line_5','4']]; // 按值排序后提取键 var sortedKeys = my_array.sort((a, b) => a[1] - b[1]).map(item => item[0]); console.log(sortedKeys); // 输出:['line_4','line_1','line_2','line_5','line_3']
这里再给你拆解一下关键步骤:
sort((a, b) => a[1] - b[1]):因为数组里的值是字符串类型的数字,用减法运算会自动将它们转换为数值进行比较,这样就能实现按数值从小到大的正确排序。map(item => item[0]):遍历排序后的数组,把每个子数组的第一个元素(也就是键)筛选出来,组合成新的数组,这就是你要的最终结果。
另外补充个小提示:sort()方法是原地修改原数组的,如果不想改动原来的my_array,可以先复制一份数组再排序,比如使用扩展运算符或者slice()方法:
// 先复制原数组,再排序提取键,不修改原数组 var sortedKeys = [...my_array].sort((a, b) => a[1] - b[1]).map(item => item[0]);
备注:内容来源于stack exchange,提问作者Nico44044
相关产品推荐
相关产品推荐

