一个数组对象根据另外一个数组的值的顺序进行排序

这段代码展示了如何使用JavaScript对一个对象数组按照对象内的属性值(key)进行排序,参考另一个数组的顺序。sortFunc函数作为比较器,利用referArr的indexOf方法确定元素位置差异进行排序。
const arr = [1, 3, 4, 2, 7];
    const arrObj = [
      {
        key: 2
      },
      {
        key: 1
      },
      {
        key: 4
      },
      {
        key: 3
      },
      {
        key: 7
      },
      {
        key: 2
      }
    ];
    const res = arrObj.sort(this.sortFunc('key', arr));
    console.log(res, 'res');
sortFunc(propName, referArr) {
      return function (prev, next) {
        return (
          referArr.indexOf(prev[propName]) - referArr.indexOf(next[propName])
        );
      };
    },

在这里插入图片描述

JavaScript 中,可以通过 `Array.prototype.sort()` 方法实现根据一个数组顺序对象数组中的特定字段进行排序。这种排序方式依赖于一个自定义的比较函数,在该函数中使用目标字段在参考数组中的索引来决定排序顺序。 假设有如下两个数组: - `dataArray`:包含需要排序对象数组。 - `orderArray`:提供排序依据的数组,其中元素顺序表示期望的排列顺序。 ### 示例代码 ```javascript const dataArray = [ { name: '保险工单', value: '0.0%' }, { name: '关务工单', value: '0.0%' }, { name: '仓储工单', value: '0.0%' }, { name: '金融工单', value: '0.0%' }, { name: '物流工单', value: '37.5%' } ]; const orderArray = ['关务工单', '物流工单', '仓储工单', '金融工单', '保险工单']; // 使用 sort 方法进行排序 const sortedArray = dataArray.sort((a, b) => { return orderArray.indexOf(a.name) - orderArray.indexOf(b.name); }); // 输出排序后的结果 console.log(sortedArray); ``` ### 工作原理说明 1. **`sort()` 方法**接受一个比较函数作为参数,并基于该函数返回来重新排列数组元素。 2. 在比较函数中,通过 `indexOf()` 获取当前对象字段在 `orderArray` 中的索引位置。 3. 比较两个对象的字段在 `orderArray` 中的索引差: - 如果差为负数,则 `a` 排在 `b` 前面; - 如果差为正数,则 `b` 排在 `a` 前面; - 如果差为 0,则保持原顺序不变。 4. 最终返回排序后的数组 `sortedArray`,其顺序与 `orderArray` 的顺序一致[^3]。 ### 注意事项 - 如果 `orderArray` 中不存在某个字段,`indexOf()` 将返回 `-1`,这可能导致意外排序结果。建议在实际应用中加入错误处理机制。 - 若数据量较大,频繁调用 `indexOf()` 可能影响性能,可以考虑使用 Map 或 Object 来优化查找效率。 - 此方法会修改原始数组,若需保留原始数据,请先复制一份副本再执行排序操作[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值