lodash - 将对象移动到数组中的第一个位置?

时间:2017-06-09 05:51:01

标签: arrays lodash

我有一个对象数组,类型为fruit / vegetable

对于我所拥有的一种类型vegetable,我希望它是数组中的第一项,但我不知道如何使用lodash这样做。

var items = [
    {'type': 'fruit', 'name': 'apple'},
    {'type': 'fruit', 'name': 'banana'},
    {'type': 'vegetable', 'name': 'brocolli'}, // how to make this first item
    {'type': 'fruit', 'name': 'cantaloupe'}
];

这是我尝试的小提琴: https://jsfiddle.net/zg6js8af/

如何将类型vegetable作为数组中的第一项,而不管其当前索引是什么?

3 个答案:

答案 0 :(得分:10)

使用lodash _.sortBy。如果类型是蔬菜,它将首先排序,否则排序第二。



var items = [
  {type: 'fruit', name: 'apple'},
  {type: 'fruit', name: 'banana'},
  {type: 'vegetable', name: 'brocolli'},
  {type: 'fruit', name: 'cantaloupe'}
];

var sortedItems = _.sortBy(items, function(item) {
  return item.type === 'vegetable' ? 0 : 1;
});

console.log(sortedItems);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:3)

为什么在不需要时使用lodash(并且可以使用单个reduce编写功能代码)?

var items = [
  {'type': 'fruit', 'name': 'apple'},
  {'type': 'fruit', 'name': 'banana'},
  {'type': 'vegetable', 'name': 'brocolli'},
  {'type': 'fruit', 'name': 'cantaloupe'}
];

var final = items.reduce(function(arr,v) {
  if (v.type === 'vegetable') return [v].concat(arr)
  arr.push(v)
  return arr
},[]);
alert(JSON.stringify(final));

答案 2 :(得分:1)

您可以type方向desc进行排序:

var res = _.orderBy(items, ['type'], ['desc']);

或使用partition

var res = _.chain(items)
    .partition({type: 'vegetable'})
    .flatten()
    .value();