js嵌套数组,如何动态排序。

var arr = [
  {
    "code": "10001",
    "name": '一般',
    "items": [
      {
        "area": "A",
        "order": 8
      },
      {
        "area": "B",
        "order": 8
      },
      {
        "area": "C",
        "order": 8
      }, {
        "area": "D",
        "order": 8
      },
    ]
  },
  {
    "code": "10003",
    "name": '不喜欢',
    "items": [
      {
        "area": "A",
        "order": 1
      },
      {
        "area": "B",
        "order": 2
      },
      {
        "area": "C",
        "order": 3
      }, {
        "area": "D",
        "order": 4
      },
    ]
  },
  {
    "code": "10002",
    "name": '喜欢',
    "items": [
      {
        "area": "A",
        "order": 23
      },
      {
        "area": "B",
        "order": 34
      },
      {
        "area": "C",
        "order": 54
      }, {
        "area": "D",
        "order": 21
      },
    ]
  }
];

比如点击了A选项,应该根据A选项的order进行排序,求大佬带飞!
如图:

image.png

需求:点击A选项,那么就根据A选项的得分order字段排序,点b选项也是根据B选项的order排序。
阅读 2k
1 个回答

//数据

var arr = [

  {
    "code": "10001",
    "name": 'B',
    "items": [
      {
        "area": "猫",
        "order": 8
      }
    ]
  },
  {
    "code": "10003",
    "name": 'A',
    "items": [
      {
        "area": "狗",
        "order": 10
      }
    ]
  },
  {
    "code": "10002",
    "name": 'C',
    "items": [
      {
        "area": "猪",
        "order": 12
      }
    ]
  }
];

//代码 items 只有一个元素的话可以这样做

// 从大到小
console.log(arr.sort((a,b)=>b.items[0]?.order - a.items[0]?.order))
// 从小到大
console.log(arr.sort((a,b)=>a.items[0]?.order - b.items[0]?.order))

//代码 items 的 order 相加排序

const sumOrder = (items)=>items.reduce((total,item)=>total+item.order,0);

// 从大到小
console.log(arr.sort((a,b)=>sumOrder(b.items) - sumOrder(a.items)))
// 从小到大
console.log(arr.sort((a,b)=>sumOrder(a.items) - sumOrder(b.items)))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题