js数组数据排序?

原数据:

      let arr = [
        [
          {price: 46, userUid: 0, item_name: '测试1', min: 41, max: 50},
          {price: 87, userUid: 0, item_name: '测试1', min: 81, max: 90},
          {price: 24, userUid: 89779, item_name: '测试1', min: 21, max: 30}
        ],
        [
          {price: 15, userUid: 0, item_name: '测试2', min: 11, max: 20},
          {price: 58, userUid: 0, item_name: '测试2', min: 51, max: 60},
          {price: 92, userUid: 0, item_name: '测试2', min: 91, max: 100},
          {price: 103, userUid: 0, item_name: '测试2', min: 101, max: 110},
        ],
        [
          {price: 9, userUid: 43062, item_name: '测试3', min: 1, max: 10},
          {price: 65, userUid: 0, item_name: '测试3', min: 61, max: 70},
        ],
        [
          {price: 36, userUid: 0, item_name: '测试4', min: 31, max: 40},
          {price: 72, userUid: 0, item_name: '测试4', min: 71, max: 80}
        ]
      ]
      let res = [
        {item_type: 3, title: '测试1'},
        {item_type: 4, title: '测试2'},
        {item_type: 2, title: '测试3'},
        {item_type: 2, title: '测试4'},
      ]

根据arr数组里面的price排序
arr数组根据res里面的item_type对应的值生成的
期望得到:

let items = [
          [
            {price: 9, userUid: 43062, item_name: '测试3', min: 1, max: 10},
            {price: 46, userUid: 0, item_name: '测试1', min: 41, max: 50},
            {price: 87, userUid: 0, item_name: '测试1', min: 81, max: 90},
          ],
          [
            {price: 15, userUid: 0, item_name: '测试2', min: 11, max: 20},
            {price: 58, userUid: 0, item_name: '测试2', min: 51, max: 60},
            {price: 92, userUid: 0, item_name: '测试2', min: 91, max: 100},
            {price: 103, userUid: 0, item_name: '测试2', min: 101, max: 110},
          ],
          [
            {price: 24, userUid: 43064, item_name: '测试1', min: 21, max: 30},
            {price: 65, userUid: 0, item_name: '测试3', min: 61, max: 70},
          ],
          [
            {price: 36, userUid: 0, item_name: '测试4', min: 31, max: 40},
            {price: 72, userUid: 0, item_name: '测试4', min: 71, max: 80}
          ]
        ]

麻烦各位大佬帮我看看


问题已解决,谢谢各位大佬们。


阅读 1k
1 个回答
const allItems = arr.flat().sort((a, b) => {
  return a.price - b.price
})
const items = []
const length = arr.length
let cursor = 0
for(let i = 0; i < length; i++){
  items[i] = []
  const count = arr[i].length
  for(let j = 0; j < count; j++){
    if (j === 0) {
      cursor = i
    } else {
      for(let k = i; k < length; k++){
        if (arr[k][j - 1]) {
          cursor++
        }
      }
      for(let k = 0; k < i; k++){
        if (arr[k][j]) {
          cursor++
        }
      }
    }
    items[i][j] = allItems[cursor]
  }
}

console.log(items)

复杂度有点高,感觉可以优化

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