Javascript 对一组对象进行排序?

Javascript 对一组对象进行排序?,javascript,sorting,Javascript,Sorting,我有下面的数据结构,我一直在按照价格的升序对所有项目的所有变体进行排序 理想情况下,我需要一种方法来找到任何项目变体的最低价格,同时仍然可以访问变体的父项 var items = [ { "id" : 1 , "name" : "name1", "variations" : [ { "subId" : 1000011, "subName" : "name1a", "price" : 1

我有下面的数据结构,我一直在按照价格的升序对所有项目的所有变体进行排序

理想情况下,我需要一种方法来找到任何项目变体的最低价格,同时仍然可以访问变体的父项

var items = [
{
    "id" : 1 ,
    "name" : "name1",
    "variations" : [
        {
            "subId" : 1000011,
            "subName" : "name1a",
            "price" : 19.99
        },
        {
            "subId" : 1000012,
            "subName" : "name1b",
            "price" : 53.21
        },
        {
            "subId" : 1000013,
            "subName" : "name1c",
            "price" : 9.49

        }
    ]

},
{
    "id" : 2, 
    "name" : "name2",
    "variations" : [
        {
            "subId" : 1000021,
            "subName" : "name2a",
            "price" : 99.29
        },
        {
            "subId" : 1000022,
            "subName" : "name2b",
            "price" : 104.99
        },
        {
            "subId" : 1000023,
            "subName" : "name2c",
            "price" : 38.00

        }
    ]

}

];

您可以使用以下代码来执行此操作:

items.forEach(function(item){
  var variations = item.variations.sort(function(a, b){
    return b.price - a.price;
  });
  console.log(variations);
});
将为
items
数组中的每个项调用此函数。如果您只想订购items数组中的第一个、第二个或
n
项,则需要使用以下命令:

var variations = items[0].variations.sort(function(a, b){
  return b.price - a.price;
});
console.log(variations);
其中,
items[0]
表示您要订购的商品

如你所见:

function(a, b){
  return b.price - a.price;
}
是从
数组中对每个数组
的最终结果进行排序的函数。使用。您可以阅读有关compare函数如何对数组项进行排序的更多信息

数组元素根据compare函数的返回值进行排序

看看这个:


只需映射它们并根据变体的价格进行排序。

您的.json中存在一些语法错误/错误类型。修复后,您可以使用以下内容:

var items = [
{
    "id" : 1 ,
    "name" : "name1",
    "variations" : [
        {
            "subId" : 1000011,
            "subName" : "name1a",
            "price" : 19.99
        },
        {
          "subId" : 1000012,
            "subName" : "name1b",
            "price" : 53.21
        },
        {
          "subId" : 1000013,
            "subName" : "name1c",
            "price" : 9.49

        }
    ]

},
{
    "id" : 2, 
    "name" : "name2",
    "variations" : [
        {
            "subId" : 1000021,
            "subName" : "name2a",
            "price" : 99.29
        },
        {
          "subId" : 1000022,
            "subName" : "name2b",
            "price" : 104.99
        },
        {
          "subId" : 1000023,
            "subName" : "name2c",
            "price" : 38.00

        }
    ]

}

];
items;

items.sort(function(a,b){
  var mina=a.variations.sort(function(x,y){
       return x.price - y.price;
     })[0].price; //find minimal price in 1st variations
  var minb=b.variations.sort(function(x,y){
       return x.price - y.price;
    })[0].price; // in 2nd variations
return mina - minb; //what compare returns 
});
更新1 如果需要更多结构解决方案,请使用以下方法:

function minProp(arr, prop){
  return arr.sort(function(a,b){
    return a[prop] - b[prop];
  })[0][prop];
}

items.sort(function(a,b){
  var mina = minProp(a.variations,'price');
  var minb = minProp(b.variations,'price');
return mina-minb;  
});

可以调用更多的结构

这里只需要说明一点:这与JSON无关。您拥有的是一个对象数组。JSON是一种交换和存储格式,看起来很像JavaScript语法。
function minProp(arr, prop){
  return arr.sort(function(a,b){
    return a[prop] - b[prop];
  })[0][prop];
}

items.sort(function(a,b){
  var mina = minProp(a.variations,'price');
  var minb = minProp(b.variations,'price');
return mina-minb;  
});