当前位置: 首页 > news >正文

JS 按照数组顺序对对象进行排序


在JavaScript中,可以通过将对象转换为可排序的结构(如数组),使用自定义比较函数基于参考数组的顺序进行排序,然后转换回对象来实现。以下是一个通用的函数示例,它接受一个参考数组和一个待排序的对象,并返回一个新对象,其键按照参考数组的顺序排列。

需求:自定义排序 el-table 表格的列。
思路:根据数组字段的顺序,对对象中的key值进行重新排序。
// 示例代码 const referenceOrder = ['sunday', 'monday', 'wednesday', 'thursday', 'friday']; const unsortedObject = { wednesday: 'wednesday', friday: 'friday', monday: 'monday', thursday: 'thursday', sunday: 'sunday' }; // 预期输出: const unsortedObject = { sunday: 'sunday', monday: 'monday', wednesday: 'wednesday', thursday: 'thursday', friday: 'friday' };
代码实现:
/** * 按照数组顺序对对象进行排序 * @param {Array} arr - 排序依据的数组 * @param {Object} obj - 需要排序的对象 * @returns {Object} 按数组顺序重新排列的对象 */ export function sortObjectByArray(arr, obj) { const sortedObj = {}; arr.forEach(key => { if (obj.hasOwnProperty(key)) { sortedObj[key] = obj[key]; } }); return sortedObj; } let sortedObject = sortObjectByArray(arr, object); console.log(sortedObject); // 输出结果: { sunday: 'sunday', monday: 'monday', wednesday: 'wednesday', thursday: 'thursday', friday: 'friday' };
问题:

在Vue中发现 调用 hasOwnProperty 报错:不要使用对象原型上的方法,因为原型的方法可能会被重写。

Do not access Object.prototype method ‘hasOwnProperty‘ from target object no-prototype-builtins

原因:

出现这种报错是因为使用Vue.js启动项目会自动生成配置为与ESLint一起使用的样板

ESLint是一个能帮助识别报告JS中的不良模式,以便维护代码

在ECMAScript5.1中,新增了 Object.create,它支持使用指定的 [[Prototype]] 创建对象。Object.create(null)是一种常见的模式,用于创建将用作映射的对象

Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法

因为no-prototype-builtins 规则不允许Object.prototype直接从对象调用方法,所以会导致这种错误

解决方法:

将xxx.hasOwnProperty(‘yyy’)修改为Object.prototype.hasOwnProperty.call(xxx, ‘yyy’)

/** * 按照数组顺序对对象进行排序 * @param {Array} arr - 排序依据的数组 * @param {Object} obj - 需要排序的对象 * @returns {Object} 按数组顺序重新排列的对象 */ export function sortObjectByArray(arr, obj) { const sortedObj = {}; arr.forEach(key => { // if (obj.hasOwnProperty(key)) { // 修改前 if (hasOwnKey(obj, key)) { // 修改后 sortedObj[key] = obj[key]; } }); return sortedObj; } function hasOwnKey(obj, key) { return Object.prototype.hasOwnProperty.call(obj, key) }

记录一下~

http://www.jsqmd.com/news/222983/

相关文章:

  • Qwen2.5-7B部署教程:从镜像拉取到网页访问完整步骤
  • LoRaWAN 协议解析:为什么它成为低功耗物联网项目的常见底座选择?
  • JS 判断两个数组内容相同
  • Qwen2.5-7B保姆级教程:从零开始部署指令调优模型详细步骤
  • Qwen2.5-7B如何提升准确率?指令遵循优化部署案例
  • Qwen2.5-7B电商场景应用:商品描述自动生成系统部署案例
  • 使用C#代码在 Excel 中获取工作表名称
  • Qwen2.5-7B多语言混输:混合语言处理
  • Qwen2.5-7B参数详解:28层transformers架构部署须知
  • SpringBoot+SpringAI实战:30分钟搭建你的第一个智能应用
  • 项目应用示例:Reflect API在ES6中的作用
  • ECU实现UDS 27服务时的RAM资源优化建议
  • Qwen2.5-7B推理加速:SwiGLU激活函数优化实战
  • 银行业一体化智能可观测平台选型指南——聚焦业务价值,保障核心业务稳定运行
  • OpenMV机器视觉项目开发流程:实战案例分享经验总结
  • Qwen2.5-7B推理速度优化:降低延迟的5个关键步骤
  • Qwen2.5-7B免费部署方案:利用社区资源运行大模型实战
  • Qwen2.5-7B中文诗歌创作:文学生成应用
  • Qwen2.5-7B文本摘要生成:长文档处理技巧
  • 如何高效部署Qwen2.5-7B?网页服务接入实战步骤详解
  • Qwen2.5-7B部署教程:基于transformers架构的环境配置详解
  • Qwen2.5-7B多模型协作:与其他AI服务集成方案
  • Qwen2.5-7B实时推理:低延迟应用场景实现
  • 一文说清MISRA C++与普通C++的关键差异
  • Qwen2.5-7B语音助手:与TTS/ASR集成方案
  • 招聘流程越复杂越好吗?HR的效率真相
  • Qwen2.5-7B视频摘要:长视频内容浓缩技术
  • DNS负载均衡能自动避开故障服务器吗?
  • 抱脸(huggingface)的使用姿势
  • Qwen2.5-7B能否处理复杂逻辑?结构化输出实战验证