根据 javascript 中的键值对对象对数组进行排序和排列

sort and rearrange arrays basked on key value pair objects in javascript

我有 3 个或更多数组显示基于重量 (w) 的价格 (p) 断点,每个数组 (i) 都有唯一标识符,如下所示。

var arr1 = [{w:1,p:10,i:"car1"},{w:2,p:15,i:"car1"},{w:3,p:21,i:"car1"}]
var arr2 = [{w:1,p:12,i:"car2"},{w:2,p:13,i:"car2"},{w:3,p:22,i:"car2"}]
var arr3 = [{w:1,p:9,i:"car3"},{w:2,p:12,i:"car3"},{w:3,p:33,i:"car3"}]

我想生成基于最便宜、第二便宜、第三便宜等的“价格表”数组。这样

var cheap1 = [{w:1,p:9,i:"car3"},{w:2,p:12,i:"car3"},{w:3,p:21,i:"car1"}]
var cheap2 = [{w:1,p:10,i:"car1"},{w:2,p:13,i:"car2"},{w:3,p:22,i:"car2"}]
var cheap3 = [{w:1,p:12,i:"car2"},{w:2,p:15,i:"car1"},{w:3,p:33,i:"car3"}]

产生这种输出的最快方法是什么。

我尝试将它们合并到一个数组中,然后将它们排序,然后遍历数组并根据具有 (w) 值的对象的索引是否等于前一个 (w) 将对象推入新数组) 值,但这行不通,我似乎找不到解决这个问题的方法。

我在多个 for 循环中尝试了多个 if then 语句并且成功了,但问题是我可能有大约 20 个数组我想比较并且 if 语句不可行。

感谢您的帮助!

您可以先按 w 属性 排序,然后再按 p 排序。为了获得排序数组的结果,将对象按索引的其余部分推入数组。

const
    array1 = [{ w: 1, p: 10, i: "car1" }, { w: 2, p: 15, i: "car1" }, { w: 3, p: 21, i: "car1" }],
    array2 = [{ w: 1, p: 12, i: "car2" }, { w: 2, p: 13, i: "car2" }, { w: 3, p: 22, i: "car2" }],
    array3 = [{ w: 1, p: 9,i: "car3" }, { w: 2, p: 12,i: "car3"  }, { w: 3, p: 33, i: "car3" }],
    [cheap1, cheap2, cheap3] = [...array1, ...array2, ...array3]
        .sort((a, b) => a.w - b.w || a.p - b.p)
        .reduce((r, o, i) => {
            (r[i % 3] ??= []).push(o);
            return r;
        }, []);

console.log(cheap1);
console.log(cheap2);
console.log(cheap3);
.as-console-wrapper { max-height: 100% !important; top: 0; }