現在、リストの「すべて」が検出された場合、出力は[""]になります。
予想される出力:[]
Copy.names = rule.names.map(function(x) {
if (x.name ==='Everything') {
return '';
} else {
return x.name;
}
});
Array.prototype.filterを使用します。
Copy.names = rule.names.filter(function(x) {
return x.name !=='Everything';
}).map(function (x) {
return x.name;
});
ES6を使用できる場合は、ジェネレーターを使用できます。
Copy.names = Array.from(function* () {
for (var x of rule.names) {
if (x.name ==='Everything') {
// do nothing
} else {
yield x.name;
}
}
})
そうでない場合...あなたは常に命令的な方法に行くことができます:
Copy.names = []
for (var x of rule.names) {
if (x.name ==='Everything') {
// do nothing
} else {
Copy.names.Push(x.name);
}
}
Array.filter()を使用した別のソリューション:
names.map(
(x) => x.name === 'Everything' && x.name
).filter(Boolean)
Lodash(私が強くお勧めします)を使用できる場合は、_.flatMap
を使用してエレガントな方法で対処できます。
Copy.names = _.flatMap(rule.names, function(x) {
if (x.name ==='Everything') {
return [];
} else {
return [x.name];
}
})
ご覧のとおり、map
に似ていますが、アイテムの代わりにアイテムの配列を返します。