问题是,我想按价格对可能包含空属性的用户数组进行排序:
var array = [
{
"created": "2015-11-27T16:33:46.781Z",
"name": "Johan",
"pricing": {
"base_price" : "12",
"price_by_hour" : "5"
}
},
{
"created": "2015-11-27T16:33:46.781Z",
"name": "Marco"
},
{
"created": "2015-11-27T16:33:46.781Z",
"name": "Jane",
"pricing": {
"base_price" : "8",
"price_by_hour" : "11"
}
}
];
array = _.sortBy(array, function(item) {
return item.pricing.base_price;
});
的console.log(数组);
TypeError: Cannot read property 'base_price' of undefined
如何将没有定价对象的项目放在我的列表底部并仍然对其进行排序?
在这种情况下,我想首先用Jane排序,然后是Johan,然后是Marco。
答案 0 :(得分:3)
只需加上条件
array = _.sortBy(array, function(item){
if(item.pricing){
return item.pricing.base_price;
}
});
答案 1 :(得分:3)
这是一种简单的方法:
_.sortBy(array, 'pricing.base_price');
当您将字符串作为iteratee传递给sortBy()时,将使用property()函数。此函数适用于属性路径,如果属性不存在,则只返回undefined
。
答案 2 :(得分:1)
好的,如果属性为空,我只需要返回false:
array = _.sortBy(array, function(item) {
if(!item.pricing || !item.pricing.base_price){
return -1;
}
return item.pricing.base_price;
});
答案 3 :(得分:1)
您需要有条件才能避免获得TypeError
。您还需要将base_price
投射到Number
以获得正确的排序。
array = _.sortBy(array, function(item){
if(item.pricing){
return Number(item.pricing.base_price);
}
});
一种替代方案是将Number
初始化为它们。
var array = [
{
"created": "2015-11-27T16:33:46.781Z",
"name": "Johan",
"pricing": {
"base_price" : 12,
"price_by_hour" : 5
}
},
{
"created": "2015-11-27T16:33:46.781Z",
"name": "Marco"
},
{
"created": "2015-11-27T16:33:46.781Z",
"name": "Jane",
"pricing": {
"base_price" : 8,
"price_by_hour" : 11
}
}
];
array = _.sortBy(array, function(item) {
if(item.pricing){
return item.pricing.base_price;
}
});