当前位置: 首页 > 知识库问答 >
问题:

javascript - js数组数据排序?

夏宏旷
2024-08-19

原数据:

      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}
          ]
        ]

麻烦各位大佬帮我看看


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


共有1个答案

韦锦程
2024-08-19
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)

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

 类似资料:
  • 未排序数组[输入]: 数组中元素的格式将始终为: 我尝试了array.sort()函数,但没有得到预期的输出。

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 数组个格式 请问大佬们怎么拿到name的值 跟 sub, 放到table表格展示, table表格列表是循环的

  • 本文向大家介绍JS中数组重排序方法,包括了JS中数组重排序方法的使用技巧和注意事项,需要的朋友参考一下 1.数组中已存在两个可直接用来重排序的方法:reverse()和sort()。 reverse()和sort()方法的返回值是经过排序后的数组。reverse()方法会反转数组项的顺序: 在默认情况下,sort()方法按升序排列数组,sort()方法会调用每个数组项的toString()转型方法

  • ui是这样的 后台返回的数据如下: 由于是gaugingTableList是数组包含多个对象。 需求是要取到数组中下面的数组的要取箭头的值 请问大佬们 , 像这种 要如何实现跟ui给的原型图一样的效果 由于arr放回来的数据比较多。这边就写了这样的代码 es6语法 识别不了,只能用原生,因为是工具控制的

  • 例如,我有以下数据集: 我需要根据数组中的条件对数组进行排序。我最终得出了这样的解决方案: 但我无法理解如何使用数组而不是硬编码的和属性。数组可以有许多属性。

  • 本文向大家介绍JavaScript数值数组排序示例分享,包括了JavaScript数值数组排序示例分享的使用技巧和注意事项,需要的朋友参考一下 但是,我们在使用中就会发现问题,这里的数组排序方法并不是按照我们想像中的数字大小来排序的,而是按照字符串测试结果改变原先的数据。这并不是我们想要的。 那么如何才可以得到我们想要的按照我们思维中的数字大小来排序呢。我们可以自己编写一个函数来实现。

  • 存在一个二维数组 const a = [{mac: 11, children: [{mac: 2}]}, {mac: 12, children: [{mac: 3}]}] 如何快速统计出mac的所有取值并返回一个数组[11, 2, 12, 3]?,顺序没有要求,不使用解构语法