【发布时间】:2013-11-26 09:50:22
【问题描述】:
在以下代码中:
function by(param) {
return function(a,b) {
if (parseInt(a[param]) < parseInt(b[param]))
return -1;
if (parseInt(a[param]) > parseInt(b[param]))
return 1;
return 0;
}
}
var data = [{
dogs: 3,
cats: 2,
fish: 14
},{
dogs: 30,
cats: 5
},{
dogs: 7,
cats: 8,
fish: 1
},{
dogs: 0,
cats: 8
}];
console.log(data.sort(by("fish")));
您可以看到并非所有对象都具有所有属性。我需要做的是按顺序对这些对象进行排序,首先选择的参数值按它们的顺序排序,然后其余的,但是,收到的输出是:
0: Object
cats: 2
dogs: 3
fish: 14
__proto__: Object
1: Object
cats: 5 //this shouldn't be here since it doesn't contain 'fish'
dogs: 30
__proto__: Object
2: Object
cats: 8
dogs: 7
fish: 1
__proto__: Object
3: Object
cats: 8
dogs: 0
现在我知道当属性未定义时会发生一些事情,但是我不确定如何处理它。
【问题讨论】:
标签: javascript arrays sorting object