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”,

这是一些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”,“南瓜香料饼干混合物”,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) );


}