[英]How do I add a new element in a dictionary in JS?
我有这种字典:INPUT
movies = {
'big' : {
actors : ['Elizabeth Perkins', 'Robert Loggia']
},
'forrest gump' : {
actors : ['Tom Hanks', 'Robin Wright', 'Gary Sinise']
},
'cast away' : {
actors : ['Helen Hunt', 'Paul Sanchez']
}
};
我想用这本字典来换一本。 例如,我必须创建一个名为“moviesWithActors”的函数,它将接收两个参数:“movies”和“actor”。 演员可能是“汤姆汉克斯”,所以当你发现他在电影中时,你不添加到嵌套数组中,但如果不是,你添加。
输出
movies = {
'big' : {
actors : ['Elizabeth Perkins', 'Robert Loggia', 'Tom Hanks']
},
'forrest gump' : {
actors : ['Tom Hanks', 'Robin Wright', 'Gary Sinise']
},
'cast away' : {
actors : ['Helen Hunt', 'Paul Sanchez', 'Tom Hanks]
}
};
我这样做:
for (const value of Object.values(newMovies)){
console.log(value.actors)
for (const act of value.actors){
//console.log(act)
if (act == actor) {
console.log("Ok, not add")
}else{
console.log("Here I have to add");
}
}
}
其中“newMovies”是“movies”和“actor =“Tom Hanks”的副本,但我无法添加到actors中的数组:[ ... ]。有什么建议吗?我可以使用map()
吗?
根据我所理解的要求,存在一个现有的电影对象数组,并且您想在这些电影中分配一个hero
。 我们必须忽略传递的英雄名称是否已经存在于该电影中,否则在该电影下添加该英雄。 如果我的理解是正确的,你去:
const movies = { 'big' : { actors : ['Elizabeth Perkins', 'Robert Loggia'] }, 'forrest gump' : { actors : ['Tom Hanks', 'Robin Wright', 'Gary Sinise'] }, 'cast away' : { actors : ['Helen Hunt', 'Paul Sanchez'] } }; function updateMoviesList(obj, heroName) { Object.keys(obj).forEach(key => { if (!obj[key].actors.includes(heroName)) { obj[key].actors.push(heroName) } }) return obj; } console.log(updateMoviesList(movies, 'Tom Hanks'));
像这样来自文档
let sports = ['soccer', 'baseball']
let total = sports.push('football', 'swimming')
console.log(sports) // ['soccer', 'baseball', 'football', 'swimming']
console.log(total.length) // 4
要访问字典中的数组,您必须首先访问它
movies['big']['actors'].push('New Actor')
let actor = 'Tom Hanks'
for (const value of Object.values(newMovies)){
for (const act of value.actors){
if (value.actors.includes(actor)) { //Here you check if actor contains in array
console.log("Ok, not add")
}else{
console.log("Here I have to add");
value.actors.push(actor) //if not push to array
}
}
}
I was suggested to use map instead and the class Object...
function actorInMovies(movies, actor) { let mappedObject = { ...movies}; Object.entries(movies).map(movie => { const movieName = movie[0]; const actors = movie[1].actors; if (!actors.includes(actor)) actors.push(actor); mappedObject = { ...mappedObject, [movieName]: { actors } }; }); return mappedObject } function main(){ const movies = { 'big' : { actors : ['Elizabeth Perkins', 'Robert Loggia'] }, 'forrest gump' : { actors : ['Tom Hanks', 'Robin Wright', 'Gary Sinise'] }, 'cast away' : { actors : ['Helen Hunt', 'Paul Sanchez'] } }; const actor = 'Tom Hanks'; console.log(actorInMovies(movies, actor)) } main();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.