[英]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.