Sorting 下划线JS:按空属性排序的对象

Sorting 下划线JS:按空属性排序的对象,sorting,underscore.js,lodash,Sorting,Underscore.js,Lodash,问题是,我想按价格对可能包含以下空属性的用户数组进行排序: var array = [ { "created": "2015-11-27T16:33:46.781Z", "name": "Johan", "pricing": { "base_price" : "12", "price_by_hour" : "5" } }, { "created": "2015-11-27T16:

问题是,我想按价格对可能包含以下空属性的用户数组进行排序:

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.logarray

TypeError: Cannot read property 'base_price' of undefined
如何将没有定价对象的项目放在列表底部,并对其进行排序

在本例中,我想先用Jane、Johan、Marco对列表进行排序。

只需放置一个条件

array = _.sortBy(array, function(item){
    if(item.pricing){
       return item.pricing.base_price;
    }
});
只需提出一个条件

array = _.sortBy(array, function(item){
    if(item.pricing){
       return item.pricing.base_price;
    }
});

好的,如果属性为空,我必须返回false:

array = _.sortBy(array, function(item) {
    if(!item.pricing || !item.pricing.base_price){
         return -1;
    }
    return item.pricing.base_price;
});

好的,如果属性为空,我必须返回false:

array = _.sortBy(array, function(item) {
    if(!item.pricing || !item.pricing.base_price){
         return -1;
    }
    return item.pricing.base_price;
});

您需要一个条件以避免出现TypeError。此外,您还需要将基本价格转换为数字,以获得适当的排序

array = _.sortBy(array, function(item){
    if(item.pricing){
       return Number(item.pricing.base_price);
    }
});
另一种选择是将它们初始化为数字


您需要一个条件以避免出现TypeError。此外,您还需要将基本价格转换为数字,以获得适当的排序

array = _.sortBy(array, function(item){
    if(item.pricing){
       return Number(item.pricing.base_price);
    }
});
另一种选择是将它们初始化为数字


下面是一个简单的方法:

_.sortBy(array, 'pricing.base_price');

当您将字符串作为迭代对象传递给时,将使用该函数。此函数用于属性路径,如果属性不存在,则只返回未定义的路径。

以下是一种简单的方法:

_.sortBy(array, 'pricing.base_price');

当您将字符串作为迭代对象传递给时,将使用该函数。此函数用于属性路径,如果属性不存在,只返回未定义的属性。

请注意,您的价格是字符串。这会直接影响sortBy函数,因为12<8,但显然12>8请注意,您的价格是字符串。这直接影响到你的排序功能,因为12<8,但显然12>8是目前为止最好和最干的er答案。目前为止最好和最干的er答案。