如何在JS的字典中添加新元素?



我有这样的字典:输入

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"one_answers";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"是"电影"的副本。演员=汤姆·汉克斯;但我不能添加到数组中的演员:[…]]。任何建议吗?我可以使用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'));

可以使用Push()

像这样从docs

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();

最新更新