要求
编写一个带有两个或更多数组的函数,并按原始提供的数组的顺序返回一个新的唯一值数组。
换句话说,所有数组中出现的所有值都应按其原始顺序包括在内,但最终数组中不得重复。
去重后的数字应按其出现在参数中的原始顺序排序,最终数组不应按数字大小进行排序。
如有疑问,请先浏览下方的测试用例。
No。1
function uniteUnique(arr1, arr2, arr3) {
var finalArray = [];
for (var i = 0; i < arguments.length; i++) {
var arrayArguments = arguments[i];
for (var j = 0; j < arrayArguments.length; j++) {
var indexValue = arrayArguments[j];
if (finalArray.indexOf(indexValue) < 0) {
finalArray.push(indexValue);
}
}
}
return finalArray;
}
// test here
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
创建空数组
for循环对比二维数组
方法算是入门级别了
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
No.2
function uniteUnique(arr) {
var args = [...arguments];
var result = [];
for (var i = 0; i < args.length; i++) {
for (var j = 0; j < args[i].length; j++) {
if (!result.includes(args[i][j])) {
result.push(args[i][j]);
}
}
}
return result;
}
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
No。3
function uniteUnique(arr1, arr2, arr3) {
var newArr;
//Convert the arguments object into an array
var args = Array.prototype.slice.call(arguments);
//Use reduce function to flatten the array
newArr = args.reduce(function(arrA, arrB) {
//Apply filter to remove the duplicate elements in the array
return arrA.concat(
arrB.filter(function(i) {
return arrA.indexOf(i) === -1;
})
);
});
return newArr;
}
// test here
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
No.4
function uniteUnique() {
var concatArr = [];
var i = 0;
while (arguments[i]) {
concatArr = concatArr.concat(arguments[i]);
i++;
}
uniqueArray = concatArr.filter(function(item, pos) {
return concatArr.indexOf(item) == pos;
});
return uniqueArray;
}
// test here
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
NO.5
function uniteUnique(...arrays) {
const flatArray = [].concat(...arrays);
return [...new Set(flatArray)];
}
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
高级的方法来了
NO.6
function uniteUnique(...arr) {
return [...new Set(arr.flat())]
}
// Or as an arrow function
const uniteUnique = (...arr) => [...new Set(arr.flat())]