You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript按对象键顺序排序映射后的数组?

解决方案:按对象键的定义顺序排列选中的标签

这个需求很常见,其实利用ES6+对象保留插入顺序的特性,就能简洁地实现,而且完全可以用链式调用搞定,不用each函数~

核心思路

我们需要先拿到ops对象的键的定义顺序,再从中筛选出selected数组里包含的键,最后映射成对应的标签。这样就能保证最终的labels严格按照ops里键的出现顺序排列。

简洁实现(ES6+)

var ops = { '1':'Label 1', '2':'Label 2', '3':'Label 3' }; 
var selected = ['3','1']; 
var labels = Object.keys(ops)
  .filter(key => selected.includes(key))
  .map(key => ops[key]); 

console.log(labels); // 输出: ["Label 1", "Label 3"]

代码解释

  • Object.keys(ops):返回ops对象的键数组,顺序就是你定义对象时的插入顺序(即['1','2','3'])
  • filter(key => selected.includes(key)):过滤掉不在selected中的键,只保留选中项,且顺序依然遵循ops的键顺序
  • map(key => ops[key]):将筛选后的键映射为对应的标签文本

兼容旧环境的写法

如果你的运行环境不支持ES6箭头函数和includes,可以换成以下写法:

var labels = Object.keys(ops)
  .filter(function(key) {
    return selected.indexOf(key) !== -1;
  })
  .map(function(key) {
    return ops[key];
  });

更紧凑的reduce写法(可选)

如果想把过滤和映射合并成一步,可以用reduce,不过可读性稍弱:

var labels = Object.keys(ops)
  .reduce(function(acc, key) {
    if (selected.indexOf(key) !== -1) acc.push(ops[key]);
    return acc;
  }, []);

内容的提问来源于stack exchange,提问作者Works for a Living

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:41:17