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