一千萬個為什麽

搜索

我怎麽可能在JavaScript中對此進行排序?


我一直在試圖弄清楚如何用JavaScript對它進行排序(我不得不以這種格式使用它)。

我需要在每個 variationValues size字段中基於 Small,Medium,Large,XL,XXLSmall 排名最高)對其進行排序。問題是我需要同時對 variationCostsvariationInventories 進行排序以匹配新訂單(因為每個值按順序對應於其他字段中的值: (

輸入我必須與之合作

var m = {
 variationNames: ["Length", "Size"  ],
 variationValues: [
  ["26.5\"", "XXL"], 
  ["25\"", "Large"], 
  ["25\"", "Medium"], 
  ["25\"", "Small"], 
  ["25\"", "XL"], 
  ["25\"", "XXL"], 
  ["26.5\"", "Large"], 
  ["26.5\"", "Small"], 
  ["26.5\"", "XL"]
 ],
 variationCosts: [
  20.00, 
  20.00, 
  20.00, 
  20.00, 
  20.00, 
  20.00, 
  20.00, 
  20.00, 
  20.00
 ],
 variationInventories: [
  10, 
  60, 
  51, 
  10, 
  15, 
  10, 
  60, 
  10, 
  15
 ],
 parentCost: 20.00
};

期望的輸出

var m = {
 variationNames: ["Length", "Size"  ],
 variationValues: [
  ["25\"", "Small"],
  ["26.5\"", "Small"],
  ["25\"", "Medium"],
  ["25\"", "Large"],
  ["26.5\"", "Large"],
  ["25\"", "XL"],
  ["26.5\"", "XL"]
  ["25\"", "XXL"],
  ["26.5\"", "XXL"],
 ],
 variationCosts: [
  20.00,
  20.00,
  20.00,
  20.00,
  20.00,
  20.00,
  20.00,
  20.00,
  20.00
 ],
 variationInventories: [
  10,
  10,
  51,
  60,
  15,
  15, 
  15,
  10,
  10
 ],
 parentCost: 20.00
};

最佳答案

我認為你需要一個中間數組,你可以在其中整合基本上是一個記錄,其中的字段分布在幾個數組中,並放入一個對象列表中。

m._tmpRecordList = [];
for(var i=0, z=m.variationValues.length; i

然後寫一個“大小”比較函數:

function sizecmp(sizeA,sizeB) {
   var nA = sizecmp.table[sizeA], nB = sizecmp.table[sizeB];
   if(nA == nB) 
     return 0;
   else if(nA < nB)
     return -1;
   else if(nA > nB)
     return 1;
   else
     throw "bad size value passed to sizecmp";
}
sizecmp.table = { Small: 5, Medium: 4, Large: 3, XL: 2, XXL: 1 }

然後使用sizecmp函數的“記錄”比較函數:

function recordcmp(recA,recB) {
   return sizecmp(recA.size,recB.size);
}

接著:

m._tmpRecordList.sort(recordcmp);

m._tmpRecordList 翻譯回你遇到的不幸結構,留給讀者練習。 :)

轉載註明原文: 我怎麽可能在JavaScript中對此進行排序?

猜你喜歡