Javascript 对网站中的对象进行排序
这是一些javascript代码,为我的问题提供了一些想法Javascript 对网站中的对象进行排序,javascript,Javascript,这是一些javascript代码,为我的问题提供了一些想法 //对象的创建 //食物 var p1=新产品(1,“oreo.jpg”,“南瓜香料oreo”,14.99); 阵列推送(p1); var p2=新产品(2,“hershey.jpg”,“hershey's Kisses,南瓜香料”,6.99); array.push(p2); var p3=新产品(3,“psl.jpg”,“南瓜香料拿铁Keurig”,13.92); 阵列推送(p3); var p4=新产品(4,“psc.jpg”,
//对象的创建
//食物
var p1=新产品(1,“oreo.jpg”,“南瓜香料oreo”,14.99);
阵列推送(p1);
var p2=新产品(2,“hershey.jpg”,“hershey's Kisses,南瓜香料”,6.99);
array.push(p2);
var p3=新产品(3,“psl.jpg”,“南瓜香料拿铁Keurig”,13.92);
阵列推送(p3);
var p4=新产品(4,“psc.jpg”,“南瓜香料饼干混合物”,10.99);
array.push(p4);
var p5=新产品(5,“hotcocoa.jpg”,“Hotcoa-南瓜香料”,17.50);
array.push(p5);
var p6=新产品(6,“pssyrup.jpg”,“南瓜派糖浆”,13.79);
array.push(p6);
//服装
var p7=新产品(7,“fedora.jpg”,“丑陋的fedora”,13.70);
array.push(p7);
var p8=新产品(8,“fedora2.jpg”,“更丑的fedora”,17.99);
array.push(p8);
var p9=新产品(9,“frytshirt.jpg”,“Hipster Fries Sweagher”,36.99);
array.push(p9);
var p10=新产品(12,“frieshat.jpg”,“Fries Bucket Hat”,29.99);
array.push(p10);
var p11=新产品(11,“unicorno.jpg”,“Unicorn Onesie”,30.99);
array.push(p11);
var p12=新产品(10,“Unicorn.jpg”,“Unicorn Mask”,17.99)代码>如果所有产品都在同一个数组中,您仍然可以对它们进行排序。您只需要给出一个对这两种类型的对象都有效的排序规则
var obj1={name:'Larent',年龄:30};
var obj2={name:'James',年龄:20};
var obj3={姓名:'Wanda',年龄:50};
变量personArr=[obj1,obj2,obj3];
//点名
personArr.sort(函数(item1,item2){
返回item1.name>item2.name;
})
console.log(personArr);
//输出:[{name:'James',年龄:20},
//{姓名:'Larent',年龄:30},
//{姓名:'Wanda',年龄:50}]
//按年龄排序
personArr.sort(函数(item1,item2){
返回item1.age>item2.age;
})
console.log(personArr);
//输出:[{name:'James',年龄:20},
//{姓名:'Larent',年龄:30},
//{name:'Wanda',age:50}]
我认为您需要进行一些重构,以使排序正确有效地工作。下面是我如何摆脱困境的:
// Set up a basic list from which to work
var preArray = [
{id:1, image:"oreo.jpg", desc:"Pumpkin Spice Oreo", price:14.99},
{id:1, image:"psl.jpg", desc:"Pumpkin Spice Latte Keurig", price:13.92},
{id:5, image:"hotcocoa.jpg", desc:"Hot Cocoa - Pumpkin Spice", price:17.50}
];
// Now do your sorting
// sortOn sorts the array "in place", so you just have to call it.
sortOn(preArray, "price");
sortOn(preArray, "desc");
// Then generate your product and DOM stuff
var postArray = [];
for( var i=0; i<preArray.length; i++){
var item = preArray[i];
postArray.push( new product(item.id, item.image, item.desc, item.price) );
}
//设置工作的基本列表
变量预排列=[
{id:1,图片:“oreo.jpg”,描述:“南瓜香料奥利奥”,价格:14.99},
{id:1,图片:“psl.jpg”,描述:“南瓜香料拿铁Keurig”,价格:13.92},
{id:5,图片:“hotcooa.jpg”,描述:“热可可-南瓜香料”,价格:17.50}
];
//现在进行排序
//sortOn将数组“就地”排序,因此您只需调用它。
索顿(预售,“价格”);
索顿(预先安排,“说明”);
//然后生成产品和DOM内容
var postArray=[];
对于(VarI=0;Ib)?1:0))*r;
}
};
}
//区分数字和字符串,以防止100先于较小的数字
//例如。
// 1
// 20
// 3
// 4000
// 50
arr.sort(sort_by(prop,reverse,numeric));
}
小心-确保您在声明变量(特别是在第一个代码段中),只要它们是有序的,就可以对它们进行排序,您只需要定义排序规则。。我不确定这是一个精确的复制品,所以我不会复制这个。
function sortOn (arr, prop, reverse, numeric) {
// Ensure there's a property
if (!prop || !arr) {
return arr
}
// Set up sort function
var sort_by = function (field, rev, num) {
var primer = num ? function(val){
return parseFloat(String(val).replace(/[^0-9.\-]+/g, ''));
} : function(val){
return String(val).toLowerCase();
}
var r = rev ? -1 : 1;
// Return the required a,b function
return function (a, b) {
// Reset a, b to the field
a = primer(a[field]), b = primer(b[field]);
if(num){
return (a-b) * r;
} else {
return ((a < b) ? -1 : ((a > b) ? 1 : 0)) * r;
}
};
}
// Distinguish between numeric and string to prevent 100's from coming before smaller
// e.g.
// 1
// 20
// 3
// 4000
// 50
arr.sort( sort_by(prop, reverse, numeric) );
}