lodash SortBy对象内容

时间:2016-11-24 18:25:03

标签: javascript node.js lodash

我有一组像这样的对象:

var quantityPricing = [ 
    { quantity: 1, cost: 0.5 }, 
    { quantity: 100, cost: 0.45 }, 
    { quantity: 1000, cost: 0.25 }, 
    { quantity: 500, cost: 0.35 }
];

我试图根据数量按升序排序这个数组的内容,所以我期望的结果应该是:

[
    { quantity: 1, cost: 0.5 },
    { quantity: 100, cost: 0.45 },
    { quantity: 500, cost: 0.35 },
    { quantity: 1000, cost: 0.25 }
]

因此我尝试使用lodash命令:

_.sortBy(quantityPricing, ['quantity']);

但不幸的是,函数返回的结果似乎只按数量中的第一个数字排序,例如:

{
    "quantity": 1,
    "cost": 0.5
},
{
    "quantity": 100,
    "cost": 0.45
},
{
    "quantity": 1000,
    "cost": 0.25
},
{
    "quantity": 500,
    "cost": 0.35
}

我不明白为什么500会在最后出现,除非它只按第一个数字排序?一旦我的数组被排序,500应该在100之后。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

Lodash sortBy没有修改原始数组,它应该返回一个新数组。你在打印原始阵列吗?

使用此代码进行测试并且有效:

var arr = _.sortBy(quantityPricing, 'quantity');
console.log(arr);

结果:

[ { quantity: 1, cost: 0.5 },
  { quantity: 100, cost: 0.45 },
  { quantity: 500, cost: 0.35 },
  { quantity: 1000, cost: 0.25 } ]

答案 1 :(得分:1)

您的代码应该可以正常工作。

https://jsbin.com/vepipafaha/edit?html,js,console,output

您的JSON数组中的数量可能已提供string而不是number

答案 2 :(得分:1)

您的代码确实有效(正如@drinchev所指出的那样)。

  1. 转到https://lodash.com/docs/(已将lodash作为全局变量加载)
  2. 打开浏览器的Javascript控制台。
  3. 粘贴此代码并点击返回:

    _.sortBy([
      { quantity: 1, cost: 0.5 }, 
      { quantity: 100, cost: 0.45 }, 
      { quantity: 1000, cost: 0.25 }, 
      { quantity: 500, cost: 0.35 }
    ], ['quantity']);
    
  4. 看起来像这样:

    sortBy() example