如何按指定键排序对象数组,再提取指定键值生成有序新数组?
按relevance排序并提取name到新数组的解决方案
假设我们有一个名为result的对象数组:
const result = [ { "name": "C:\\file.json", "relevance": 0.5 }, { "name": "C:\\folder", "relevance": 0.5454545454545454 }, { "name": "C:\\file_1.txt", "relevance": 0.1 } ];
我们需要按relevance键对该数组进行降序排序,并将排序后的name值提取到新数组arr中,最终得到:
["C:\\folder", "C:\\file.json", "C:\\file_1.txt"]
很简单,你可以用JavaScript里的sort()和map()方法组合来搞定这个需求,具体步骤如下:
- 先排序数组:用
sort()方法传入一个自定义的比较函数,让数组按relevance从高到低排列。这里只要返回b.relevance - a.relevance就能实现降序(如果要升序就反过来用a.relevance - b.relevance)。 - 再提取name字段:用
map()方法遍历排序后的数组,把每个对象里的name属性挑出来,就能生成你想要的新数组了。
完整的代码示例如下:
const result = [ { "name": "C:\\file.json", "relevance": 0.5 }, { "name": "C:\\folder", "relevance": 0.5454545454545454 }, { "name": "C:\\file_1.txt", "relevance": 0.1 } ]; // 先排序再提取name,一步到位 const arr = result.sort((a, b) => b.relevance - a.relevance).map(item => item.name); console.log(arr); // 输出结果正好是你要的:["C:\\folder", "C:\\file.json", "C:\\file_1.txt"]
小提醒
- 注意哦,
sort()方法会直接修改原有的result数组,如果不想动原数组的话,可以先复制一份再排序,比如用扩展运算符:[...result].sort(...) - 因为这里的
relevance是数值类型,所以直接用减法比较就足够了,不用额外处理字符串转换的问题。
更新说明
这并非重复问题!我不明白为何JavaScript讨论区中总是有人将明显不重复的问题标记为重复。
内容的提问来源于stack exchange,提问作者Un1
相关产品推荐
相关产品推荐

