v2.5.2
Giriş yap

JavaScript dilinde birden fazla Array'i istenilen şekilde karıştırmak.

mertt
353 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Selamlar,

Amacım birden fazla arrayı birbiriyle karıştırarak istediğim şekilde kombinlemek. Örnek vermek gerekirsek elimizde 2 adet array olsun.

    let firstArray = ["40", "41", "42"];
    let secondArray = ["Red", "Black"];

Amacım bu iki arrayı aşağıda ki gibi olacak şekilde yeni bir array haline getirmek.

    let sonuc = [ ["40", "Red"], ["40", "Black"], ["41", "Red"], ["41", "Black"], ["42", "Red"], ["42", "Black"] ];

firstArray ve secondArray şeklinde 2 array belirttim array sayısı ve içlerinde ki eleman sayısı değişebilir. İstediğim şekilde nasıl arrayleri kombinlerim?

Cevap yaz
Cevaplar (3)
codepacks
681 gün önce

JavaScript'te birden fazla diziyi karıştırmak için concat() metodunu veya spread operator kullanabilirsiniz.
concat() metodu iki veya daha fazla diziyi birleştirir ve yeni bir dizi oluşturur.
spread operator (...) dizileri ayrıştırmak için kullanılır ve dizileri birleştirirken daha esnek bir yol sağlar.

Örneğin, aşağıdaki örnekte iki dizi ("dizi1" ve "dizi2") kullanılır ve concat() metodu ile birleştirilir.

const dizi1 = [1, 2, 3];
const dizi2 = [4, 5, 6];
const karisikDizi = dizi1.concat(dizi2);
console.log(karisikDizi); // [1, 2, 3, 4, 5, 6] 

Aynı işlemi spread operator ile yapmak için :

const dizi1 = [1, 2, 3];
const dizi2 = [4, 5, 6];
const karisikDizi = [...dizi1, ...dizi2];
console.log(karisikDizi); // [1, 2, 3, 4, 5, 6] 

Birden fazla diziyi karıştırmak isterseniz, dizileri rastgele sıralamak için sort() metodunu kullanabilirsiniz.
Ancak dizileri sıralamak için kullanılır o yüzden karıştırma olarak kullanamayız.
Onun yerine 'Fisher-Yates Shuffle Algorithm' yada benzeri bir algoritma kullanmanız önerilir.

function karisikDizi(arr) {
    for (let i = arr.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [arr[i], arr[j]] = [arr[j], arr[i]];
    }
    return arr;
} 

Bu fonksiyon, gönderilen diziyi rastgele sıralar ve yeni bir dizi oluşturmaz.

tayfunerbilen
681 gün önce

ben de farkli bir ornek vereyim:

console.log(
    firstArray.reduce((acc, curr) => [...acc, ...secondArray.reduce((a, c) => [...a, [curr, c]] ,[])] ,[])
)
ebykdrms
682 gün önce
const sonuc = firstArray.map(x=>secondArray.map(y=>[x, y])).flat(1);

veya

const sonuc = [];
firstArray.map(x=>{
    sonuc.push(...secondArray.map(y=>[x,y]));
});

veya

const sonuc = [];
for(let i=0; i < firstArray.length; i++) {
    for(let k=0; k < secondArray.length; k++) {
        sonuc.push([firstArray[i], secondArray[k]);
    }
}

Bu işlemi birkaç farklı yerde kullanacaksan fonksiyonlaştırmanı öneririm:

const matchSetsOneToOne = (set1, set2) => set1.map(x=>set2.map(y=>[x, y])).flat(1);

// Kullanırken:
const sonuc = matchSetsOneToOne(firstArray, secondArray);