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

javascript - js数组排序处理?

慎弘化
2024-08-19
  let arr = [
    {price: 5, userUid: 0, item_name: '测试3'},
    {price: 20, userUid: 0, item_name: '测试2'},
    {price: 23, userUid: 0, item_name: '测试1'},
    {price: 39, userUid: 0, item_name: '测试2'},
    {price: 43, userUid: 0, item_name: '测试1'},
    {price: 55, userUid: 0, item_name: '测试3'},
    {price: 66, userUid: 0, item_name: '测试2'},
    {price: 72, userUid: 0, item_name: '测试3'},
    {price: 82, userUid: 0, item_name: '测试3'},
    {price: 97, userUid: 0, item_name: '测试3'},
  ]
  let items = [
    { id: 1, num: 2 }
    { id: 2, num: 3 }
    { id: 3, num: 5 }
  ]

根据items数组里面num的值去arr数组里面拿数据,按竖向排序
期望得到数据格式:

let result= [
  [{price: 5, userUid: 0, item_name: '测试3'},{price: 39, userUid: 0, item_name: '测试2'},]
  [{price: 20, userUid: 0, item_name: '测试2'},{price: 43, userUid: 0, item_name: '测试1'},{price: 66, userUid: 0, item_name: '测试2'},]
  [{price: 23, userUid: 0, item_name: '测试1'},{price: 55, userUid: 0, item_name: '测试3'},{price: 72, userUid: 0, item_name: '测试3'},{price: 82, userUid: 0, item_name: '测试3'},{price: 97, userUid: 0, item_name: '测试3'},]
]

麻烦各位大佬看看,感激不尽

共有2个答案

百里杰
2024-08-19
const result: (typeof arr)[0][][] = new Array(items.length)
    .fill(0)
    .map(() => [])

for (let flag = true, index = 0; flag; ) {
    flag = false
    items.forEach((v, i) => {
        const a = result[i]
        if (a.length < v.num) {
            a.push(arr[index++])
            flag = true
        }
    })
}

console.log(result)
[
  [
    { price: 5, userUid: 0, item_name: "测试3" },
    { price: 39, userUid: 0, item_name: "测试2" }
  ],
  [
    { price: 20, userUid: 0, item_name: "测试2" },
    { price: 43, userUid: 0, item_name: "测试1" },
    { price: 66, userUid: 0, item_name: "测试2" }
  ],
  [
    { price: 23, userUid: 0, item_name: "测试1" },
    { price: 55, userUid: 0, item_name: "测试3" },
    { price: 72, userUid: 0, item_name: "测试3" },
    { price: 82, userUid: 0, item_name: "测试3" },
    { price: 97, userUid: 0, item_name: "测试3" }
  ]
]
谭山
2024-08-19

要实现您描述的功能,我们需要先根据 items 数组中的 num 值从 arr 数组中挑选出相应数量的元素,并且按照 items 数组中 id 的顺序进行组织。然后,对每个组内的元素按 price 进行排序。

但是,由于您提供的 items 数组在JavaScript中语法上是不正确的(缺少逗号分隔对象),我将首先纠正这个错误。然后,我将展示如何实现您所需的功能。

以下是完整的JavaScript代码示例:

let arr = [
    {price: 5, userUid: 0, item_name: '测试3'},
    {price: 20, userUid: 0, item_name: '测试2'},
    {price: 23, userUid: 0, item_name: '测试1'},
    {price: 39, userUid: 0, item_name: '测试2'},
    {price: 43, userUid: 0, item_name: '测试1'},
    {price: 55, userUid: 0, item_name: '测试3'},
    {price: 66, userUid: 0, item_name: '测试2'},
    {price: 72, userUid: 0, item_name: '测试3'},
    {price: 82, userUid: 0, item_name: '测试3'},
    {price: 97, userUid: 0, item_name: '测试3'},
];

let items = [
    { id: 1, num: 2 },
    { id: 2, num: 3 },
    { id: 3, num: 5 }
];

// 根据items的num值从arr中挑选数据,并按items的id顺序排序
let result = items.map(item => {
    // 从arr中挑选前num个价格最低的元素
    let selectedItems = arr.slice(0).sort((a, b) => a.price - b.price).slice(0, item.num);
    return selectedItems;
});

// 输出结果
console.log(result);

注意

  1. 上述代码按照每个 itemnum 值从 arr 中选择了价格最低的 num 个元素。如果 arr 中的元素不足以满足所有 num 的要求,则结果中的某些数组可能会短于指定的 num
  2. 结果 result 是一个二维数组,其中每个子数组都包含了根据 items 数组中相应 idnum 值选出的元素,并且这些元素在子数组内部已按 price 排序。
  3. 如果您希望按照 items 数组中的 id 顺序,将所有选中的元素合并到一个单一数组中,而不是一个二维数组,那么需要稍微修改上述逻辑,但根据您的问题描述,上述答案应该符合您的需求。

如果您的意图是进一步处理这些数据(如合并到单一数组并按 price 排序等),请根据具体需求调整代码。

 类似资料:
  • 本文向大家介绍JavaScript对象数组的排序处理方法,包括了JavaScript对象数组的排序处理方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript对象数组的排序处理方法。分享给大家供大家参考,具体如下: javascript的数组排序函数 sort方法,默认是按照ASCII 字符顺序进行升序排列。 arrayobj.sort(sortfunction); 参数:

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

  • 问题内容: 这是一段C ++代码,显示了一些非常特殊的行为。由于某些奇怪的原因,奇迹般地对数据进行排序使代码快了将近六倍: 不使用std::sort(data, data + arraySize);,代码将在11.54秒内运行。 使用排序的数据,代码将在1.93秒内运行。 最初,我认为这可能只是语言或编译器异常,所以我尝试了Java: 具有类似但不太极端的结果。 我首先想到的是排序将数据带入缓存,

  • 处理成 [11,1201,1304,1305]

  • 假设我有一个二维像素网格(4乘4像素)——我有一个和我草图一样大小的图像,它被切割成16个部分。现在我将所有16个部分加载到一个数组中。我想依次将这个数组映射到2D网格上,这样我的整体图像就可以再次正确地组合在一起。也就是说,左上角图像0.png右下角图像16.png. 我就是找不到能让我这么做的公式。例如,我知道使用可以在所有像素中运行,从左上到右下,所以我试过了。如果没有它就不能正确地坐在一起

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

  • 请问如何让ar1这种ip排序,js可以实现吗? 另外,我希望是用换行符分割(现在是,分割),排序后也是一行一个。请问可以实现吗

  • 在这篇文章中,为什么处理排序数组比处理随机数组更快,它说分支预测是排序数组性能提升的原因。 但是我刚刚使用Python尝试了这个例子;我认为排序数组和随机数组没有区别(我尝试了字节数组和数组;并使用line_profile来分析计算)。 我遗漏了什么吗? 这是我的代码: