js 数组对象排序实现?

问题描述

js数组对象排序问题

问题出现的环境背景及自己尝试过哪些方法

js数组对象排序问题

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
初始代码:
let newArr = [

{ "schedule": "已交付", "0": "3005B00000041" },
{ "schedule": "未开工", "0": "3005B00000308" },
{ "schedule": "建设中", "0": "3005B00000037" },
{ "schedule": "建设中", "0": "3005B00000283" },
{ "schedule": "未开工", "0": "3005B00000304" }

];

你期待的结果是什么?实际看到的错误信息又是什么?

目标结果:
let resultArr = [

{ "schedule": "已交付", "0": "3005B00000041" },
{ "schedule": "未开工", "0": "3005B00000308" },
{ "schedule": "未开工", "0": "3005B00000304" },
{ "schedule": "建设中", "0": "3005B00000037" },
{ "schedule": "建设中", "0": "3005B00000283" },

]

阅读 3.2k
3 个回答

意思就是按 已交付 > 未开工 > 建设中 的顺序排序吧

let op = {
"已交付": 0,
"未开工": 1,
"建设中": 2
}
let resultArr = newArr.sort((a,b)=>op[a.schedule] - op[b.schedule])

sort自定义一个排序函数就搞定了~

let sortFunc = (a, b) => {
    let list = ['已交付', '未开工', '建设中']
    return list.indexOf(a.schedule) - list.indexOf(b.schedule)
}
arr.sort(sortFunc)

我理解你是要根据schedule的状态进行排序,那你要先建立一个schedule排序的依赖数组

const sortBase = ['已交付', '未开工', '建设中'];

const testSet = [{ schedule: '已交付', 0: '3005B00000041' },
{ schedule: '未开工', 0: '3005B00000308' },
{ schedule: '建设中', 0: '3005B00000037' },
{ schedule: '建设中', 0: '3005B00000283' },
{ schedule: '未开工', 0: '3005B00000304' }];

const sort = set => {
    const result =  set.map(item => ({
        ...item,
        index: sortBase.findIndex(e => item.schedule === e)
    }));
    result.sort((a, b) => a.index - b.index);
    return result;
};

const result = sort(testSet);

console.log(result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题