我一直在试图弄清楚如何在JavaScript中对它进行排序(我不得不以这种格式使用它)。
我需要根据每个Small, Medium, Large, XL, XXL
尺寸字段中的Small
(variationValues
排名最高)对其进行排序。问题是我需要同时对variationCosts
和variationInventories
进行排序以匹配新订单(因为每个值按顺序对应于其他字段中的值:(
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
};
答案 0 :(得分:3)
我认为你需要一个中间数组,在这个数组中,你可以整合基本上是一个记录,其中的字段分布在几个数组中,形成一个对象列表。
m._tmpRecordList = [];
for(var i=0, z=m.variationValues.length; i<z; i++) {
m._tmpRecordList.push({
length: m.variationValues[i][0],
size: m.variationValues[i][1],
cost: m.variationCosts[i],
inventories: m.variationInventories[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
翻译回你所困扰的不幸结构,留给读者练习。 :)
答案 1 :(得分:1)
您可以重新安排数据结构吗?如果将相关数据存储在一起会更容易。例如:
var variations = [
{ length: '25"', size: "Small", cost: 20.00, inventory: 10 },
{ length: '26.5"', size: "Small", cost: 20.00, inventory: 10 },
{ length: '25"', size: "Medium", cost: 20.00, inventory: 51 },
{ length: '25"', size: "Large", cost: 20.00, inventory: 60 },
{ length: '26.5"', size: "Large", cost: 20.00, inventory: 15 },
{ length: '25"', size: "XL", cost: 20.00, inventory: 15 },
{ length: '26.5"', size: "XL", cost: 20.00, inventory: 15 },
{ length: '25"', size: "XXL", cost: 20.00, inventory: 10 },
{ length: '26.5"', size: "XXL", cost: 20.00, inventory: 10 }
];
variations.sort(
function(v1, v2) {
return compareSizes(v1.size, v2.size);
}
);
(适用于compareSizes()
的定义。)
答案 2 :(得分:0)
您应该考虑将这些数组转换为一个对象/哈希数组。或者,如果失败,您可以使用decorate-sort-undecorate pattern。在这种情况下,您可以将两个相关的数组压缩,排序,然后解压缩。