À l'heure actuelle, si «Tout» dans la liste est détecté, la sortie devient [""].
Production attendue: []
Copy.names = rule.names.map(function(x) {
if (x.name ==='Everything') {
return '';
} else {
return x.name;
}
});
Utilisez Array.prototype.filter:
Copy.names = rule.names.filter(function(x) {
return x.name !=='Everything';
}).map(function (x) {
return x.name;
});
Si vous pouvez utiliser ES6, vous pouvez utiliser le générateur pour cela:
Copy.names = Array.from(function* () {
for (var x of rule.names) {
if (x.name ==='Everything') {
// do nothing
} else {
yield x.name;
}
}
})
Si non ... vous pouvez toujours aller de manière impérative:
Copy.names = []
for (var x of rule.names) {
if (x.name ==='Everything') {
// do nothing
} else {
Copy.names.Push(x.name);
}
}
Si vous pouvez utiliser Lodash (ce que je recommande vivement), vous pouvez le traiter de manière élégante en utilisant _.flatMap
:
Copy.names = _.flatMap(rule.names, function(x) {
if (x.name ==='Everything') {
return [];
} else {
return [x.name];
}
})
Comme vous pouvez le constater, cela ressemble à map
, sauf que vous retournez un tableau d’éléments au lieu d’élément.
Une autre solution avec Array.filter ():
names.map(
(x) => x.name === 'Everything' && x.name
).filter(Boolean)