Besoin d'afficher un tableau dans un format spécifique. Tableaux d'entrée:
let resultArr = [
{"id":"12356","username": "test@gmail.com","sharedPaper": "some paper"}
]
Résultat attendu:
let userList = [
{"id": "12356","username": "test@gmail.com"},
{"id": "333333", "username": "test1@gmail.com"}
]
let userArray = [
{"username": "test@gmail.com","sharedPaper": "some paper"}
]
9 Réponses :
Vous devez joindre deux listes sur le nom d'utilisateur de propriété commune
Vous pouvez faire comme ceci:
userArray.forEach(w=>{
let user=userList.find(u=>u.username===w.username);
if(user) w['id']=user.id})
userArray sera mis à jour avec la propriété supplémentaire 'id' comme ci-dessous
Vous pouvez utiliser les méthodes filter et map (en supposant que username est unique)
const userList = [{
"id": "12356",
"username": "test@gmail.com"
}, {
"id": "333333",
"username": "test1@gmail.com"
}];
const userArray = [{"username": "test@gmail.com","sharedPaper": "some paper"}];
const result = userList
.filter(user => userArray.find(u => u.username === user.username))
.map(user => {
const userAdditionalData = userArray.find(u => u.username === user.username);
return {
...user,
...userAdditionalData
}
});
console.log(result)
Je pense que vous pouvez aussi le faire avec "réduire", quelque chose comme ceci:
var resultArr = userList.reduce((arr, e) => {
arr.push(Object.assign({}, e, userArray.find(a => a.username == e.username)))
return arr;
}, [])
Vous pouvez faire:
const userList = [{"id": "12356", "username": "test@gmail.com"}, {"id": "333333", "username": "test1@gmail.com"}];
const userArray = [{"username": "test@gmail.com", "sharedPaper": "some paper"}];
const resultArr = userArray.map(u => Object.assign({id: userList.find(ul => ul.username === u.username).id}, u));
console.log(resultArr);
Je suggérerai de créer une Map ou Object first pour rechercher plutôt en utilisant Array.prototype.find
let userList=[{"id": "12356","username": "test@gmail.com"},
{"id": "333333", "username": "test1@gmail.com"}]
let userArray=[{"username": "test@gmail.com","sharedPaper": "some paper"}]
let map = userArray.reduce((a, c) => {
a.has(c.username)? '': a.set(c.username, c);
return a;
}, new Map())
let out = userList.map(ele => ({...ele, ...map.get(ele.username)})).filter(ele => ele.sharedPaper);
console.log(out)
let userList = [{
"id": "12356",
"username": "test@gmail.com"
},
{
"id": "333333",
"username": "test1@gmail.com"
}
]
let userArray = [{
"username": "test@gmail.com",
"sharedPaper": "some paper"
}]
let resultArr = userList.map(user => {
let userSharedPaper = userArray.find(userId => userId.username ===
user.username);
if (userSharedPaper && Object.keys(userSharedPaper).length > 0) {
return { ...user,
sharedPaper: userSharedPaper.sharedPaper
}
} else {
return { ...user, sharedPaper:"" }
}
})
console.log(resultArr)
let userList = [
{"id": "12356","username": "test@gmail.com"},
{"id": "333333", "username": "test1@gmail.com"}
]
let userArray = [
{"username": "test@gmail.com","sharedPaper": "some paper"}
]
let rs = userArray.map(({username:u, sharedPaper}) =>
({...(userList.find(e => u === e.username)), sharedPaper})
)
console.log(rs)
let userList=[{"id": "12356","username": "test@gmail.com"},
{"id": "333333", "username": "test1@gmail.com"}];
let userArray=[{"username": "test@gmail.com","sharedPaper": "some paper"}];
var result = userList.reduce((acc, c)=>{
let k = userArray.find((a)=>{ return a.username == c.username });
k ? acc.push({...c, ...k}): ''
return acc ;
}, []);
console.log(result);
Hope this helps you !
let userList = [
{ id: '12356', username: 'user1@gmail.com' },
{ id: '333333', username: 'user2@gmail.com' },
]
let userArray = [
{ username: 'user1@gmail.com', sharedPaper: 'some paper 1' },
{ username: 'user2@gmail.com', sharedPaper: 'some paper 2' },
]
let resultArr = userList.map(user => ({
...user,
sharedPaper: userArray.find(
usa => usa.username === user.username
).sharedPaper,
}))
console.log(resultArr)