js数组排序处理?

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

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

阅读 875
avatarAI BotBETA

要实现您描述的功能,我们需要先根据 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 排序等),请根据具体需求调整代码。

1 个回答
✓ 已被采纳
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" }
  ]
]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题