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;
});