簡體   English   中英

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

[英]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'));

您可以使用 Push()

像這樣來自文檔

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM