首先,你的代码并没有做你认为它做的事情。尝试使用这个案例运行它:
array1 = [0,0,0,1,1,1,3,5,5,5,5,9];
array2 = [1,1,1,1,1,1];
你会看到问题所在。
对于大多数基本数据的用例,你可以很好地使用本地功能,它完全可以实现你想要达到的目的:
let uniqueArr = [];
uniqueArr = [...new Set ([...array1, ...array2])].sort();
但我想这不是你的问题。
如果数据很复杂或只是为了好玩,我们可以考虑其他解决方案。
有很多方法可以做事情:有些需要更多时间,有些需要更多空间。这是我对这个解决方案的想法,欢迎纠正或给予认可。
function binarySearch(arr, left, right, x){
if (right >= l) {
let mid = left + Math.floor((right - l) / 2);
if (arr[mid] == x)
return mid;
if (arr[mid] > x)
return binarySearch(arr, left, mid - 1, x);
return binarySearch(arr, mid + 1, right, x);
}
return -1;
}
function cloneArrayKeepUniqueOnly(array, array2){
let uniqueOnly = [];
for (let i = 0; i < array.length; i++ ){
if (array[i] == array[i+1] ){
i ++;
continue;
} else if (array[i] != array[i-1] && binarySearch(array2, 0, array2.length, array[i]) == -1){
uniqueOnly.push(array[i]);
}
}
return uniqueOnly;
}
function cloneArrKeepOneOfEach(array){
let oneOfEach = [];
for (let i = 0; i < array.length; i++ ){
if (array[i] == array[i+1] ){
continue;
} else{
oneOfEach.push(array[i]);
}
}
return oneOfEach;
}
let array1 = [0,0,0,0,1,1,2,3,4,5,5,5,5,6,7];
let array2 = [1,1,1,1,1,1,1,1];
let mergedArray_oneOfEach = [];
let mergedArray_onlyUniques = [];
let complementArr_uniques, complementArr;
mergedArray_onlyUniques = cloneArrayKeepUniqueOnly(array1, array2);
complementArr_uniques = cloneArrayKeepUniqueOnly(array2, array1);
for (element of complementArr_uniques){
mergedArray_onlyUniques.push(element);
}
console.log("mergedArray_onlyUniques: ", mergedArray_onlyUniques);
mergedArray_oneOfEach = cloneArrKeepOneOfEach(array1);
complementArr = cloneArrKeepOneOfEach(array2);
while (i < mergedArray_oneOfEach.length){
let searchIndex = binarySearch(complementArr, 0, complementArr.length-1, mergedArray_oneOfEach[i]);
if (searchIndex != -1) {
complementArr.splice(searchIndex, 1);
}
i ++;
}
for (element of complementArr){
mergedArray_oneOfEach.push(element);
}
console.log("mergedArray_oneOfEach: ", mergedArray_oneOfEach);
另一种方法是先合并这两个数组,然后对它们进行排序,接着使用“减少/克隆”函数或哈希表。具体取决于数据的特性和您可用的资源。