Sloučení dvou polí bez jakýchkoliv duplicit

AndreaAndrea

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.