0
votes

Générer une carte à partir de la matrice de chaîne

J'essaie de stocker des noms de serveur dans une carte basée sur une logique prédéfinie.

Par exemple, si les noms sont: p> xxx pré>

ils seront stocké sur une carte comme: p> xxx pré>

la première lettre entre les deux "-" sera toujours la clé p>

Je ne suis pas trop familier avec JavaScript Donc, j'ai fait cela la voie naïve mais je me demandais s'il y a une meilleure façon de faire une meilleure façon de faire cela. P>

const servers = ["temp-a-name1", "temp-a-name2", "temp-b-name1", "temp-b-name2"];

let map = {};
let key;
for (const server of servers) {
  key = server.charAt(server.indexOf("-") + 1);
  if (key in map) {
    map[key].push(server);
  } else {
    map[key] = [server];
  }
}


1 commentaires

Coller avec votre version. Le code de l'OMI est lisible et facile à comprendre, il n'est donc pas nécessaire de refactoriser. BTW, de telles questions conviennent mieux à codereview.stackexchange.com .


4 Réponses :


1
votes

Essayez ceci:

const servers = ["temp-a-name1", "temp-a-name2", "temp-b-name1", "temp-b-name2"];
const result = servers.reduce((acc, cur) => ({
    ...acc,
  [cur.split('-')[1]]: (acc[cur.split('-')[1]] || []).concat([cur]),
}), {})
console.log(result);


0 commentaires

3
votes

Vous pouvez utiliser le réduire () code> fonction :

p>

let servers = ["temp-a-name1", "temp-a-name2", "temp-b-name1", "temp-b-name2"];

let map = servers.reduce((acc, server) => {
  let key = server.charAt(server.indexOf("-") + 1);

  if (acc[key])
    acc[key].push(server);
  else
    acc[key] = [server];
    
  return acc;
}, {})

console.log(map)


1 commentaires

réduire () n'est pas une fonctionnalité ES6



1
votes

J'utiliserais réduire. Une manière naïve d'obtenir la clé pourrait être .split ('-') [1] code>.

p>

const names = ['temp-a-name1', 'temp-a-name2', 'temp-b-name1', 'temp-b-name2'];
const map = names.reduce((map, name) => {
  const key = name.split('-')[1];
  const namesWithKey = map[key] || [];

  return { ...map, [key]: [...namesWithKey, name] };
}, {});

console.log(map);


0 commentaires