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

JavaScript:将对象转换为带排序的多组无重复键数组(含特定拆分规则)

没问题,我来帮你搞定这个对象转数组的需求,咱们一步步来实现:

核心思路
  • 先提取对象中固定的三个属性(mainPoint、create_Date、delete_Date),这三个值会作为每个生成数组的前三个元素;
  • 筛选出对象中所有包含user_或city_前缀的键,这类键每个都要单独生成一个数组;
  • 对筛选后的键进行排序(默认按字母序,可按需调整);
  • 遍历每个符合条件的键,把固定前缀、键名、键对应的值组合成新数组。
代码实现(JavaScript)
const transformObject = (obj) => {
  // 提取固定的前三个元素,添加容错处理避免属性不存在时报错
  const fixedPrefix = [
    obj.mainPoint ?? '',
    obj.create_Date ?? '',
    obj.delete_Date ?? ''
  ];
  
  // 筛选带"user_"或"city_"前缀的键
  const targetKeys = Object.keys(obj).filter(key => 
    key.startsWith('user_') || key.startsWith('city_')
  );
  
  // 对键进行排序(默认字母序,可自定义规则)
  const sortedKeys = targetKeys.sort();
  
  // 生成最终的数组集合
  return sortedKeys.map(key => [...fixedPrefix, key, obj[key]]);
};

// 测试示例
const test = { 
  "mainPoint": "user1", 
  "create_Date": "2018-04-23 16:51:10", 
  "delete_Date": "2018-04-23 16:50", 
  "user_one": 4, 
  "user_two": 4, 
  "city_one": "bs", 
  "city_two": "mi" 
};

const result = transformObject(test);
console.log(result);
输出结果

运行后你会得到如下数组集合:

[
  ['user1','2018-04-23 16:51:10','2018-04-23 16:50','city_one','bs'],
  ['user1','2018-04-23 16:51:10','2018-04-23 16:50','city_two','mi'],
  ['user1','2018-04-23 16:51:10','2018-04-23 16:50','user_one',4],
  ['user1','2018-04-23 16:51:10','2018-04-23 16:50','user_two',4]
]
自定义调整说明
  • 排序规则:如果不想用默认字母序,比如要按user_/city_后面的数字排序,可以修改sort的回调:
    const sortedKeys = targetKeys.sort((a, b) => {
      // 提取下划线后的数字部分(比如"user_1"提取"1")
      const numA = parseInt(a.split('_')[2]);
      const numB = parseInt(b.split('_')[2]);
      return numA - numB;
      // 如果是英文单词排序(比如one/two/three),可以用localeCompare
      // return a.split('_')[2].localeCompare(b.split('_')[2]);
    });
    
  • 容错处理:代码里用了?? ''来处理固定属性不存在的情况,要是你需要严格校验属性是否存在,可以改成抛出错误或者其他自定义逻辑。

内容的提问来源于stack exchange,提问作者torresito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:25:32