alexsouye
alexsouye

Reputation: 740

How to update a key for all my objects that are in an array

I have this array on input :

const categories = [ 
  { id: 9, name: 'General Knowledge' },
  { id: 10, name: 'Entertainment: Books' },
  { id: 11, name: 'Entertainment: Film' },
  { id: 12, name: 'Entertainment: Music' },
  { id: 13, name: 'Entertainment: Musicals & Theatres' },
  { id: 14, name: 'Entertainment: Television' },
  { id: 15, name: 'Entertainment: Video Games' },
  { id: 16, name: 'Entertainment: Board Games' },
  { id: 17, name: 'Science & Nature' },
  { id: 18, name: 'Science: Computers' },
  { id: 19, name: 'Science: Mathematics' },
  { id: 20, name: 'Mythology' },
  { id: 21, name: 'Sports' },
  { id: 22, name: 'Geography' },
  { id: 23, name: 'History' },
  { id: 24, name: 'Politics' },
  { id: 25, name: 'Art' },
  { id: 26, name: 'Celebrities' },
  { id: 27, name: 'Animals' },
  { id: 28, name: 'Vehicles' },
  { id: 29, name: 'Entertainment: Comics' },
  { id: 30, name: 'Science: Gadgets' },
  { id: 31, name: 'Entertainment: Japanese Anime & Manga' },
  { id: 32, name: 'Entertainment: Cartoon & Animations' } 
]

I need to translate all the keys name of my objects. For that, I use the google translation API.

here is the code :

googleTranslate.translate(categories.map(i => i.name), 'en', 'fr', function(err, translations) {
     console.log(translations.map(tr => tr.translatedText))
})

So the result is :

[ 'Culture générale',
  'Divertissement: livres',
  'Divertissement: Film',
  'Divertissement: Musique',
  'Divertissement: comédies musicales et théâtres',
  'Divertissement: Télévision',
  'Divertissement: jeux vidéo',
  'Divertissement: jeux de société',
  'Science et nature',
  'Science: Informatique',
  'Science: Mathématiques',
  'Mythologie',
  'Des sports',
  'La géographie',
  'L\'histoire',
  'Politique',
  'Art',
  'Célébrités',
  'Animaux',
  'Véhicules',
  'Divertissement: BD',
  'Science: Gadgets',
  'Divertissement: anime et manga japonais',
  'Divertissement: dessin animé et animations' ]

But I would like to keep the structure of the first array. Only update the keys name with the translations.

Output :

const categories = [ 
  { id: 9, name: 'Culture générale' },
  { id: 10, name: 'Divertissement: livres' },
  { id: 11, name: 'Divertissement: Film' },
  { id: 12, name: 'Divertissement: Musique' },
  { id: 13, name: 'Divertissement: comédies musicales et théâtres' },
  { id: 14, name: 'Divertissement: Télévision' },
  { id: 15, name: 'Divertissement: jeux vidéo' },
  { id: 16, name: 'Divertissement: jeux de société' },
  { id: 17, name: 'Science et nature' },
  { id: 18, name: 'Science: Informatique' },
  { id: 19, name: 'Science: Mathématiques' },
  { id: 20, name: 'Mythologie' },
  { id: 21, name: 'Des sports' },
  { id: 22, name: 'La géographie' },
  { id: 23, name: 'L\'histoire' },
  { id: 24, name: 'Politique' },
  { id: 25, name: 'Art' },
  { id: 26, name: 'Célébrités' },
  { id: 27, name: 'Animaux' },
  { id: 28, name: 'Véhicules' },
  { id: 29, name: 'Divertissement: BD' },
  { id: 30, name: 'Science: Gadgets' },
  { id: 31, name: 'Divertissement: anime et manga japonais' },
  { id: 32, name: 'Divertissement: dessin animé et animations' } 
]

I have not found how to do it yet. Thanks in advance for your time.

Upvotes: 1

Views: 62

Answers (3)

Bobbey
Bobbey

Reputation: 303

if you want to just change the name of your categories, this should do the trick...

function replace(categories, result) {

      for (let i = 0; i < categories.length; i++) {
          categories[i].name = result[i];          
      }

      return categories;
  }

have a look at the snippet, it's simple.

const categories = [ 
    { id: 9, name: 'General Knowledge' },
    { id: 10, name: 'Entertainment: Books' },
    { id: 11, name: 'Entertainment: Film' },
    { id: 12, name: 'Entertainment: Music' },
    { id: 13, name: 'Entertainment: Musicals & Theatres' },
    { id: 14, name: 'Entertainment: Television' },
    { id: 15, name: 'Entertainment: Video Games' },
    { id: 16, name: 'Entertainment: Board Games' },
    { id: 17, name: 'Science & Nature' },
    { id: 18, name: 'Science: Computers' },
    { id: 19, name: 'Science: Mathematics' },
    { id: 20, name: 'Mythology' },
    { id: 21, name: 'Sports' },
    { id: 22, name: 'Geography' },
    { id: 23, name: 'History' },
    { id: 24, name: 'Politics' },
    { id: 25, name: 'Art' },
    { id: 26, name: 'Celebrities' },
    { id: 27, name: 'Animals' },
    { id: 28, name: 'Vehicles' },
    { id: 29, name: 'Entertainment: Comics' },
    { id: 30, name: 'Science: Gadgets' },
    { id: 31, name: 'Entertainment: Japanese Anime & Manga' },
    { id: 32, name: 'Entertainment: Cartoon & Animations' } 
  ]

const result = [ 'Culture générale',
  'Divertissement: livres',
  'Divertissement: Film',
  'Divertissement: Musique',
  'Divertissement: comédies musicales et théâtres',
  'Divertissement: Télévision',
  'Divertissement: jeux vidéo',
  'Divertissement: jeux de société',
  'Science et nature',
  'Science: Informatique',
  'Science: Mathématiques',
  'Mythologie',
  'Des sports',
  'La géographie',
  'L\'histoire',
  'Politique',
  'Art',
  'Célébrités',
  'Animaux',
  'Véhicules',
  'Divertissement: BD',
  'Science: Gadgets',
  'Divertissement: anime et manga japonais',
  'Divertissement: dessin animé et animations' ];

  let catNew = replace(categories, result);

  console.log(catNew);

  function replace(categories, result) {

      for (let i = 0; i < categories.length; i++) {
          categories[i].name = result[i];          
      }

      return categories;
  }

Upvotes: 0

Jackkobec
Jackkobec

Reputation: 6705

The simplest way is:

googleTranslate.translate(categories.map(i => i.name), 'en', 'fr', function(err, translations) {
     console.log(translations.map(tr => {
       id: tr.id, 
       name: tr.name 
     }
  ))
})

Upvotes: 3

cgdannie
cgdannie

Reputation: 158

You could recreate the old structure after the translation:

const categories [...];
const translatedCategories = new Array();

googleTranslate.translate(categories.map(i => i.name), 'en', 'fr', function(err, translations) {
    translations.forEach((tr, index) => {
        translatedCategories.push({
            id: categories[index].id,
            name: tr.translatedText
        });
     });
});

Upvotes: 0

Related Questions