如何在数组上只分配和迭代一次



如果这是一个重复的问题,请随意标记,如果您有更好的标题,请随意改写标题。我不知道该如何拼写标题。我有两个不同的数组。第一数组包含一组用户,第二数组包含一套化身。值得一提的是,化身的数组总是比用户大。我需要配对每个用户只有一个化身。每个用户不应该具有相同的化身,并且每个化身应该与用户的性别相匹配。我怎样才能做到这一点?

avatars = [
{
"id" : 1,
"image" : "maleavatar1",
"gender": "male"
},
{
"id" : 2,
"image" : "maleavatar2",
"gender": "male"
},
{
"id" : 3,
"image" : "maleavatar3",
"gender": "male"
},
{
"id" : 4,
"image" : "femaleavatar1",
"gender": "female"
},
{
"id" : 5,
"image" : "femaleavatar2",
"gender": "female"
},
{
"id" : 6,
"image" : "femaleavatar3",
"gender": "female"
},
{
"id" : 7,
"image" : "femaleavatar4",
"gender": "female"
},
]
users = [
{
"id" : 1,
"name" : "Manila",
"gender": "female"
},
{
"id" : 2,
"name" : "Josy",
"gender": "female"
},
{
"id" : 3,
"name" : "Eliza",
"gender": "female"
},
{
"id" : 4,
"name" : "Martin",
"gender": "male"
},
{
"id" : 5,
"name" : "Mark",
"gender": "male"
},
{
"id" : 6,
"name" : "John",
"gender": "male"
}
]
var count = 0;
var randUser = '';
var randos = [];
var b_s = users.length;
var a_s = avatars.length;
users.forEach(function(user){count++

avatars.forEach(function(avatar){
if(avatar.gender === user.gender){
randUser = {
"name" : user.name,
"avatar" : avatar.image,
"gender" : user.gender

}
//push users
randos.push(randUser);
}
})
})
console.log(randos);

当你听到"随机无重复";,思考";"洗牌";。

因此,要分配随机、不重复、性别正确的头像,请按性别隔离头像,打乱男性和女性头像,然后依次分配给用户。。。。

const avatars = getAvatars();  // just to move the data to the bottom of the snippet
const users = getUsers();
const shuffledMales = shuffle(avatars.filter(a => a.gender==="male"));
const shuffledFemales = shuffle(avatars.filter(a => a.gender==="female"));
let maleIndex = 0, femaleIndex = 0;
users.forEach(user => {
user.avatar = user.gender === "male" ? shuffledMales[maleIndex++] : shuffledFemales[femaleIndex++];
});
console.log(users);
// fisher-yates shuffle, adapted from https://bost.ocks.org/mike/shuffle/
function shuffle(array) {
let copy = [],
n = array.length,
i;
while (n) {
let i = Math.floor(Math.random() * array.length);
if (i in array) {
copy.push(array[i]);
delete array[i];
n--;
}
}
return copy;
}
function getAvatars() {
return [{
"id": 1,
"image": "maleavatar1",
"gender": "male"
},
{
"id": 2,
"image": "maleavatar2",
"gender": "male"
},
{
"id": 3,
"image": "maleavatar3",
"gender": "male"
},
{
"id": 4,
"image": "femaleavatar1",
"gender": "female"
},
{
"id": 5,
"image": "femaleavatar2",
"gender": "female"
},
{
"id": 6,
"image": "femaleavatar3",
"gender": "female"
},
{
"id": 7,
"image": "femaleavatar4",
"gender": "female"
},
];
}
function getUsers() {
return [{
"id": 1,
"name": "Manila",
"gender": "female"
},
{
"id": 2,
"name": "Josy",
"gender": "female"
},
{
"id": 3,
"name": "Eliza",
"gender": "female"
},
{
"id": 4,
"name": "Martin",
"gender": "male"
},
{
"id": 5,
"name": "Mark",
"gender": "male"
},
{
"id": 6,
"name": "John",
"gender": "male"
}
];
}

最新更新