如何使用LoDash / Underscore将所有零值移动到数组的末尾?

时间:2014-07-18 14:43:36

标签: javascript arrays underscore.js lodash

假设我有一个对象数组:

    var a = [
      {label: 'one', value: 0},
      {label: 'two', value: 5},
      {label: 'three', value: 9},
      {label: 'four', value: 4},
      {label: 'five', value: 2},
      {label: 'six', value: 0}
    ]

现在我需要按升序顺序放置所有项目,这可以通过_.sortBy轻松完成,但是我想将所有零值从数组的开头放到结尾,所以我的值看起来像行2, 4, 5, 9, 0, 0

2 个答案:

答案 0 :(得分:3)

您可以使用自定义迭代器和Infinity property作为代表0的值,从而将它们推送到最后:

var s = _.sortBy(a, function(o) {
    return o.value || Infinity ;
});

http://jsfiddle.net/nikoshr/LwYpq/

答案 1 :(得分:2)

您可以使用下划线库来执行此操作,例如

var _ = require("underscore");

var result = _.partition(a, function(currentObject) {
    return currentObject.value !== 0;
});

console.log(_.flatten([_.sortBy(result[0], "value"), result[1]]));