我有以下代码:
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]
答案 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];