我有 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 陳述句不可行。
感謝幫助!
uj5u.com熱心網友回復:
您可以先按屬性排序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; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427506.html
標籤:javascript 节点.js 数组 排序 过滤
