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> ils seront stocké sur une carte comme: p> 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];
}
}
4 Réponses :
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);
Vous pouvez utiliser le p> réduire () code> fonction : 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)
réduire () code> n'est pas une fonctionnalité ES6
J'utiliserais réduire. Une manière naïve d'obtenir la clé pourrait être p> .split ('-') [1] code>. 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);
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 .