仅在保持正确顺序的同时将数组转换为唯一值

时间:2017-06-09 22:21:16

标签: javascript arrays ecmascript-6

我有以下代码:

function uniteUnique(arr) {
  //Create a single Array of value  
  arr = arguments[0].concat(arguments[1], arguments[2]);
  //Reduce the Array to unique values only
  arr = arr.reduce((pre, curr) => {
    //Some function to reduce values
  });
  return arr;
}

uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);

目标是在维持订单的同时生成仅包含唯一值的单个数组。

目前它返回:

[1, 3, 2, 5, 2, 1, 4, 2, 1]

我想将此缩减为:

[1, 3, 2, 5, 4]

2 个答案:

答案 0 :(得分:4)

您可以使用Set

  $str = preg_replace(
        array(
               '/([A-Z])(?=\s|$)/',
               '/([A-Z])([A-Z])/'
        ),
        array(
               '\1.',
               '\1.\2'
        ),
  $str );

它维护插入顺序,并且本质上只包含唯一值。

在ES5中,您可以通过将使用的值保持为临时对象的属性来构建结果数组:

function uniteUnique(...args) {
    return [...new Set([].concat(...args))];
}
var u = uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
console.log(u);

答案 1 :(得分:1)

您可以使用Set对象,因为它已使您的值在一个对象中保持唯一:

const mySet = new Set([1, 3, 2, 5, 2, 1, 4, 2, 1]);
// returns:   Set { 1, 3, 4, 5 };

const arrayUniques = [...mySet];

console.log(arrayUniques); 
// returns:  [1, 3, 4, 5];