按特性对结构对象进行排序

时间:2014-02-07 15:30:17

标签: javascript sorting object

所以我有这样的虚拟数据对象:

var Products = {
    'sku': {n:'Trampolines rain covers',v:'7Ft',l:'http://www.google.com',i:['media/cache/search/media/1151-Trampoline-jumping-mat.png','media/cache/searchSuggest/media/1151-Trampoline-jumping-mat.png','#'],r:['4','3.2','0','1','3','0','0'],p:['7.99','9.99'],d:'Some kind of description',f:'Features',b:'Benefits',s:'Specifications'},
    'sku2': {n:'Icon cast adjustable dumbbell',v:'10kg',l:'http://www.google.com',i:['media/cache/search/media/1167-Single-dumbbell.png','media/cache/searchSuggest/media/1167-Single-dumbbell.png','#'],r:['4','2.5','1','0','1','0','2'],p:['7.99','9.99'],d:'Some kind of description',f:'Features',b:'Benefits',s:'Specifications'},
    'sku3': {n:'Trampolines safety net & bases',v:'6Ft',l:'http://www.google.com',i:['media/cache/search/media/1195-Trampoline-safety-net.png','media/cache/searchSuggest/media/1195-Trampoline-safety-net.png','#'],r:['3','3.5','1','0','1','0','1'],p:['7.99','9.99'],d:'Some kind of description',f:'Features',b:'Benefits',s:'Specifications'},
    'sku4': {n:'Andico spring for trampolines',v:'5.5 inch',l:'http://www.google.com',i:['media/cache/search/media/1166-Trampoline.png','media/cache/searchSuggest/media/1166-Trampoline.png','#'],r:['3','3.5','1','0','1','0','1'],p:['7.99','9.99'],d:'Some kind of description',f:'Features',b:'Benefits',s:'Specifications'}
}

然后我有一系列skus

var skus = ['sku','sku3','sku4'];

我的任务是按字母顺序升序sku对象属性 n (多字的字符串/产品标题)对此数组进行排序。

我知道我应该使用.sort(ref)函数,但我不知道里面有函数,比如:

skus.sort(function(a,b) { });

但是我无法找到如何制定内部功能来完成工作。也许我应该以另一种方式做到这一点?

1 个答案:

答案 0 :(得分:4)

你几乎就在那里。在函数中,您使用ab来查找Products对象上的条目,以便比较条目:

skus.sort(function(a, b) {
    var an = Products[a].n,
        bn = Products[b].n;
    if (an === bn) {
        return 0;
    }
    return an < bn ? -1 : 1;
});