Nejprve si ukážeme různé metody slučování ve verzích ES5 a ES6. Poté se naučíme, jak odstranit duplicity pomocí různých metod.
Nakonec si ukážeme jak provést sloučení v jediném kroku, a to buď napsáním vlastních funkcí, nebo pomocí externích knihoven.
Předpokládejme, že máme dvě pole arrayA
a arrayB
a chceme je sloučit do poleC
:
var arrayA = ["Java", "JavaScript"];
var arrayB = ["C#", "PHP" , "Java"];
ECMAScript 6
Spread syntaxe (...) se používá k rozšíření obsahu iterovatelných prvků v místě, kde se očekávají prvky jako pole nebo kde se například ve funkci očekává nula nebo více argumentů:
var arr = [2 , 4];
function add(x, y){
return x+y;
}
console.log( add(...arr) );
Nyní sloučíme naše pole do poleC
pomocí syntaxe spread:
var arrayC = [...arrayA,...arrayB];
console.log(arrayC);
ECMAScript 5 použití Array.concat
Sloučení pomocí funkce Array.concat
slouží ke sloučení obsahu vstupního pole arrayB
s obsahem zdrojového pole arrayA
.
vaar arrayC = arrayA.concat(arrayB);
console.log(arrayC);
Pokud chceme z výsledného pole odstranit duplikáty, můžeme to provést několika způsoby, takže se podívejme, jak to můžeme udělat. Příklad:
var arrayA = ["Java","JavaScript"];
var arrayB = ["C#", "PHP" , "Java"];
var arrayC ;
console.log("Array A > "+arrayA);
console.log("Array B > "+arrayB);
// merging using Array.concat function in ECMAScript 5
arrayC = arrayA.concat(arrayB);
console.log("Merged Using Array.concat function >"+arrayC);
Odebrání duplicit z pole v ES6
Nejsnažší způsob, jak odstranit duplicitní elementy z pole, je využít datovou strukturu Set
.
Tato struktura nám jakožto množina garantuje, že obsahuje jen unikátní prvky.
function unique(list) {
var set = new Set();
list.forEach(function (item) {
set.add(item);
})
return Array.from(set);
}
Jiný způsob, který bude fungovat i ve starších prohlížečích, které nepodporovaly ES6. Tento způsob je hodně low-level. Neprve vytvořte vlastní vnořenou smyčku for.
function removeDuplicates(inArray){
var arr = inArray.concat();
var length = arr.length;
for (var i=0; i<arr.length; ++i) {
//create the second cycle of the loop from element n+1
for(var j=i+1; j<arr.length; ++j) {
//if the two elements are equal , then they are duplicate
if(arr[i] === arr[j]) {
arr.splice(j, 1); //remove the duplicated element
}
}
}
return arr;
}
Potom můžeme použít funkci removeDuplicates jako kteroukoli jinou funkci.
Náš algoritmus bude vypadat takto: Vytvořte klon ze vstupního pole inArray, takže původní pole nezměníme. Vytvořte vnořenou smyčku pro nalezení a odstranění duplicitního prvku nalezeného pomocí arr.splice(). Vnější začíná od n a vnitřní od n+1.
Potom můžeme použít funkci removeDuplicates jako kteroukoli jinou funkci.