在相应的时尚Javascript中排序相关的数组

时间:2014-01-12 23:23:28

标签: javascript arrays json sorting

我正在尝试处理JSON对象并执行数学计算权重。订单在我的算法中很重要,但JSON对象中的产品顺序按照客户将其添加到购物车的顺序传递给我。我需要以相同的方式对许多属性进行排序。

在以下示例中,客户以“错误”(1.5,1,1.25)的顺序添加了产品,因此object.products看起来像这样:

"products":[
{
  "quantity": 3,
  "weight_each": 1.5
},
{
  "quantity": 4,
  "weight_each": 1
},
{
  "quantity": 2,
  "weight_each": 1.25
}

我的第一步是将这些对象添加到更加键盘友好的数组中:

for (var i = 0; i < object.products.length; i++)
{
  quantity[i] = object.products[i].quantity;
  weight[i] = object.products[i].weight_each;
}

如前所述,我的算法要求按重量(升序)对产品进行排序。我知道如何独立排序每个数组[weight.sort()],但我不知道如何对每个数组进行排序,以便排序后,权重[0]和数量[0]引用相同的产品。

我的最终结果应如下:

console.log(weight)   // [1,1.25,1.5]
console.log(quantity) // [4,2,3]

我已经谷歌了许多不同的短语,并尝试了几种不同的方法。如果这已经得到回答,或者这是一个基本问题,我道歉。我似乎无法独自克服这个障碍,所有的答案都非常感谢! :)

3 个答案:

答案 0 :(得分:1)

在将weight_eachquantity分成两个未连接的数组之前,对weight_each上的产品数组进行排序:

input = '{"products":[{"quantity":3,"weight_each":1.5},{"quantity":4,"weight_each":1},{"quantity":2,"weight_each":1.25}]}';

data = JSON.parse( input );

data.products.sort( function(a,b){return a.weight_each - b.weight_each; } );

for ( var i = 0; i < data.products.length; i++)
{
  quantity[i] = data.products[i].quantity;
  weight[i]   = data.products[i].weight_each;
}

答案 1 :(得分:0)

你的第一步是错的! 首先对输入数组进行排序,以便按重量对每个产品进行排序。然后,当您将其拆分为两个单独的数组时,它们将按正确的顺序排列。

当然你可以这样离开它,但是你需要编写手动排序,你可以对两个数组进行相同的操作。例如,如果一个排序步骤切换索引0和1的位置,则在两个阵列上执行此操作(依此类推所有sroting步骤)。

答案 2 :(得分:-1)

将商品添加到购物车后,添加名为total weight的变量,即数量*重量。然后按total weight对其进行排序。现在重要的是你如何溢出它,它总是按重量排序。