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

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 排序等),请根据具体需求调整代码。

 类似资料:
  • 原数据: 根据arr数组里面的price排序 arr数组根据res里面的item_type对应的值生成的 期望得到: 麻烦各位大佬帮我看看 问题已解决,谢谢各位大佬们。

  • arr数组最小长度是4最大是8 let num = 600;暂时写死600,这个数自定义输入的 麻烦各位大佬帮忙看看

  • 原数据: 根据arr数组里面的price字段排序 期望得到: 麻烦各位大佬帮我看看

  • let num = 600; num是最大数为600,然后根据arr数组里面的test的值之和(5+4+5+6)为20, 600 / 20 = 30; 希望得到下面的格式: 图片第一列5个输入框对应数组arr里面下标为0的test的值为5 图片第二列4个输入框对应数组arr里面下标为1的test的值为4 ... 控制1-30之间的随机数里面的输入框修改的时候只能输入1-30的数, 控制31-60之

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

  • js 数组的数据处理 这个2数字不是固定的, 如果a这个值是2 我需要得到arr为 arr = [9] 如果a这个值是4 我需要得到arr为 arr = [7,8,9] 大佬们帮我看看