Lodash:从数组中删除连续的重复项

Lodash: Remove consecutive duplicates from an array

本文关键字:连续 删除 数组 Lodash      更新时间:2023-09-26

我需要减少这个对象数组

[
  {id:1, value:'A'},
  {id:2, value:'B'},
  {id:3, value:'B'},
  {id:4, value:'B'},
  {id:5, value:'A'},
  {id:6, value:'A'},
  {id:7, value:'B'}
]

[
  {id:1, value:'A'},
  {id:2, value:'B'},
  {id:5, value:'A'},
  {id:7, value:'B'}
]

如果连续对象具有相同的值,它将保留第一个对象并删除其余对象。

我目前的解决方案是

var lastValue = undefined;
var result = [];
var propPath = 'value'; // I need later to reference nested props
objects.filter(function(object){
  var value = _.at(object, propPath);
  if (!_.isEqual(value, lastValue)){
    result.push(object);
    lastValue = value;
  }
});
console.log(result);

我的问题是,由于 Lodash 有很多功能,有没有一种 Lodash 方法可以更简单地做到这一点?也许是一些不使用辅助变量(lastValue和result)的预构建解决方案。

这可以通过.reject来解决:

_.reject(objects, function (object, i) {
    return i > 0 && objects[i - 1].value === object.value;
});

演示