×

数组去重并返回被删除的元素

96
赵团结
2017.04.21 14:54 字数 43

前几天看到这个题目,很有意思,想了下用Array.prototype.reduce实现,直接返回一个数组然后apply callback

Array.prototype.distinct = function(cb) {
  cb.apply(this, this.reduce(function(all, value) {
    if(all[0].indexOf(value) > -1) {
      all[1].push(value);
    } else {
      all[0].push(value);
    }

  return all;
  }, [[], []]);
}

然后一行版:

Array.prototype.distinct = function (cb) {
    cb.apply(this, this.reduce((a, v) => a[+(a[0].indexOf(v) > -1)].push(v) && a, [[], []]));
};
日记本
Web note ad 1