簡體   English   中英

如何在 javascript 中組合兩個 arrays?

[英]How to combine two arrays in javascript?

我有這個數組:

const participants = [
    {id: 1, name: 'Tom', gender: 'm'}
    ,{id: 2, name: 'Paul', gender: 'm'}
    ,{id: 3, name: 'Igor', gender: 'm'}
    ,{id: 4, name: 'Anna', gender: 'f'}
    ,{id: 5, name: 'Mary', gender: 'f'}
    ,{id: 6, name: 'Alice', gender: 'f'}
];

現在,對於每個“回合”,我想讓每個男人與一個女孩配對。 就像是:

First round:
Tom and Anna
Paul and Mary
Igor and Alice

Second round:
Tom and Mary
Paul and Alice
Igor and Anna

Thirth round:
Tom and Alice
Paul and Anna
Igor and Mary

但是,可能只有 2 個女孩(安娜和瑪麗)。 在這種情況下,對於每一輪,其中一個人應該是“單獨的”。

為此創建算法的最佳方法是什么? 我創建了一個算法,它並沒有真正以正確的方式完成工作,因為結果不符合上述情況。

 const participants = [ { id: 1, name: 'Tom', gender: 'm' }, { id: 2, name: 'Paul', gender: 'm' }, { id: 3, name: 'Igor', gender: 'm' }, { id: 4, name: 'Anna', gender: 'f' }, { id: 5, name: 'Mary', gender: 'f' }, { id: 6, name: 'Alice', gender: 'f' } ]; const men = participants.filter(el => el.gender === 'm'); const women = participants.filter(el => el.gender === 'f'); let currentIndex = 0; let pairs = []; men.forEach((el, index) => { const tmpPair = []; men.forEach((el2, index2) => { let woman = null; if ((index2 + currentIndex) >= women.length) { woman = women[0]; } else { woman = women[index2 + currentIndex]; } tmpPair.push({ man: men[index2], woman: woman }); }); currentIndex++; pairs.push(tmpPair); }); console.log(pairs);

這對你有用嗎?

const men = participants.filter(el => el.gender === 'm');
const women = participants.filter(el => el.gender === 'f');

var maxlen = Math.max(men.length, women.length)
let pairs = [], pair;

for (var i = 0; i < maxlen; i++) {
    pair={};
     if (men[i] && men[i] != '') pair.man = men[i].name;
     if (women[i] && women[i] != '') pair.woman = women[i].name;
     pairs.push(pair)
}
// pairs is an array like [{"man":"Tom", "woman":"Mary"}, ...]

我改變了你的樣本以擺脫其中一名女性。

特別注意在數組排序 function 中使用Math.random 這是假設您的需求不是特別需要 3 輪,而是即時創建一輪。

其次,請注意在迭代之前需要同時獲得男性和女性的長度。 很容易利用Array.map中經常被忽視的索引參數以完全流暢的語法寫出來。 但我認為最好循環使用老式的方式,這樣你也能滿足太少男人的需要。

 const participants = [ {id: 1, name: 'Tom', gender: 'm'}, {id: 2, name: 'Paul', gender: 'm'}, {id: 3, name: 'Igor', gender: 'm'}, {id: 4, name: 'Anna', gender: 'f'}, {id: 5, name: 'Mary', gender: 'f'} ]; let getGender = (gender) => participants.filter(p => p.gender == gender).sort((a,b) => Math.random() > 0.5? 1: -1); let males = getGender('m'); let females = getGender('f'); let pairs = []; let n = Math.max(males.length, females.length); for(let i = 0; i < n; i++) pairs.push({ man: males[i], woman: females[i] }); for(let pair of pairs) console.log( pairs.man && pairs.woman? `${pair.man.name} and ${pair.woman.name}`: `${pair.man.name || pair.woman.name} is alone` );

這對你有用嗎?

 const participants = [{ id: 1, name: 'Tom', gender: 'm' }, { id: 2, name: 'Paul', gender: 'm' }, { id: 3, name: 'Igor', gender: 'm' }, { id: 4, name: 'Anna', gender: 'f' }, { id: 5, name: 'Mary', gender: 'f' } ]; const men = participants.filter(p => p.gender === 'm'); const women = participants.filter(p => p.gender == 'f'); const round = men.length; for (i = 0; i < round; i += 1) { console.log(`Round ${i + 1}`); men.forEach((m, index) => { const wIndex = (index + i) % round; const woman = women[wIndex]? ` and ${women[wIndex].name}`: ''; console.log(`${m.name}${woman}`); }) console.log(' '); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM