web-dev-qa-db-ja.com

array.map関数で何も返さない方法(空の配列)

現在、リストの「すべて」が検出された場合、出力は[""]になります。
予想される出力:[]

Copy.names = rule.names.map(function(x) {                                
    if (x.name ==='Everything') {                                   
        return '';
    } else {
        return x.name;
    }
});
8
Angular

Array.prototype.filterを使用します。

Copy.names = rule.names.filter(function(x) {                                
    return x.name !=='Everything';
}).map(function (x) {
    return x.name;
});
9
Dylon

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);
   }
}
2
GingerPlusPlus

Array.filter()を使用した別のソリューション:

names.map(
  (x) => x.name === 'Everything' && x.name
).filter(Boolean)
2
Egor Belov

Lodash(私が強くお勧めします)を使用できる場合は、_.flatMapを使用してエレガントな方法で対処できます。

Copy.names = _.flatMap(rule.names, function(x) {
    if (x.name ==='Everything') {                                   
        return [];
    } else {
        return [x.name];
    }
})

ご覧のとおり、mapに似ていますが、アイテムの代わりにアイテムの配列を返します。

0
GingerPlusPlus