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
相关产品推荐
相关产品推荐

