我有以下数据结构,并且我坚持根据价格按升序对所有项目中的所有变体进行排序。
理想情况下,我需要一种方法来查找任何商品变体的最低价格,同时仍然可以访问变体的父级。
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
}
]
}
];
答案 0 :(得分:1)
您可以使用以下代码执行此操作:
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;
}
是从item
数组命令每个数组items
的最终结果的函数。使用the sort
function。您可以阅读有关比较函数如何对数组项进行排序的更多信息。
数组元素根据比较函数的返回值
进行排序
答案 1 :(得分:0)
查看此jsbin example:
var sortedByPrice = items.map(function(item) {
item.variations.sort(function(a, b) {
return a.price - b.price;
});
return item;
});
console.log(sortedByprice);
只需映射它们并根据变化的价格进行排序。
答案 2 :(得分:0)
.json中有一些语法错误/错误类型。修复后你可以使用这样的东西:
end()
如果您想要更多结构解决方案,请使用:
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
});
可以调用更多结构。