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'},]
]
麻烦各位大佬看看,感激不尽
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" }
]
]
要实现您描述的功能,我们需要先根据 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);
注意:
item
的 num
值从 arr
中选择了价格最低的 num
个元素。如果 arr
中的元素不足以满足所有 num
的要求,则结果中的某些数组可能会短于指定的 num
。result
是一个二维数组,其中每个子数组都包含了根据 items
数组中相应 id
的 num
值选出的元素,并且这些元素在子数组内部已按 price
排序。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来分析计算)。 我遗漏了什么吗? 这是我的代码: