如何使用js-yaml的dump()方法自定义排序键顺序?
自定义js-yaml dump()的对象键顺序
要完全控制dump()输出的对象键顺序,sortKeys选项的排序函数逻辑和JavaScript数组sort()的比较函数完全一致:
- 函数接收两个参数
a和b(即待比较的两个键名) - 返回负数:
a排在b前面 - 返回正数:
b排在a前面 - 返回0:两者顺序保持不变
实现严格自定义顺序的方法
先定义一个指定优先级的键数组,再通过排序函数根据键在数组中的索引来决定顺序:
const yaml = require('js-yaml'); // 按需求定义键的显示顺序 const keyPriority = ['name', 'age', 'email', 'address']; const targetData = { email: 'john@example.com', age: 30, address: '123 Main St', name: 'John Doe' }; const outputYaml = yaml.dump(targetData, { sortKeys: (a, b) => { // 获取键在优先级数组中的索引,未定义的键默认排到最后 const idxA = keyPriority.indexOf(a); const idxB = keyPriority.indexOf(b); const adjustIdx = (idx) => idx === -1 ? keyPriority.length : idx; return adjustIdx(idxA) - adjustIdx(idxB); } }); console.log(outputYaml);
输出结果会严格遵循预设顺序:
name: John Doe age: 30 email: john@example.com address: 123 Main St
额外说明
- 未在
keyPriority中定义的键,会被统一放到所有指定键的后方,且这部分键默认按字母排序(如需调整,可在排序函数中补充对应逻辑) - 排序函数的参数
a和b均为字符串类型的键名,无需处理类型转换
内容的提问来源于stack exchange,提问作者John Deighan
相关产品推荐
相关产品推荐

