Underscore Js:对象排序为空属性
UnderscoreJs : objects sortBy with empty attributes
问题是,我想按价格对一组可能包含空属性的用户进行排序:
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
如何将没有 pricing 对象的项目放在我的列表底部并且仍然对其进行排序?
在这种情况下,我想首先对列表进行排序,Jane,然后是 Johan,然后是 Marco。
就放个条件
array = _.sortBy(array, function(item){
if(item.pricing){
return item.pricing.base_price;
}
});
好的,如果属性为空,我只需要 return false:
array = _.sortBy(array, function(item) {
if(!item.pricing || !item.pricing.base_price){
return -1;
}
return item.pricing.base_price;
});
您需要一个条件来避免获得 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;
}
});
这是一个简单的方法:
_.sortBy(array, 'pricing.base_price');
当您将字符串作为迭代器传递给 sortBy(), the property() 函数时使用。此函数适用于 属性 路径,如果 属性 不存在,则只需 returns undefined
。
问题是,我想按价格对一组可能包含空属性的用户进行排序:
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
如何将没有 pricing 对象的项目放在我的列表底部并且仍然对其进行排序?
在这种情况下,我想首先对列表进行排序,Jane,然后是 Johan,然后是 Marco。
就放个条件
array = _.sortBy(array, function(item){
if(item.pricing){
return item.pricing.base_price;
}
});
好的,如果属性为空,我只需要 return false:
array = _.sortBy(array, function(item) {
if(!item.pricing || !item.pricing.base_price){
return -1;
}
return item.pricing.base_price;
});
您需要一个条件来避免获得 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;
}
});
这是一个简单的方法:
_.sortBy(array, 'pricing.base_price');
当您将字符串作为迭代器传递给 sortBy(), the property() 函数时使用。此函数适用于 属性 路径,如果 属性 不存在,则只需 returns undefined
。