如何使用array.map函数返回任何内容(空数组)

时间:2016-06-27 19:28:00

标签: javascript arrays array-map

现在,如果检测到列表中的“Everything”,则输出变为[“”] 预期产出:[]

border: 3px solid red;

5 个答案:

答案 0 :(得分:9)

使用Array.prototype.filter:

{{1}}

答案 1 :(得分:2)

如果您可以使用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 :(得分:0)

如果您可以使用Lodash(我强烈推荐),您可以使用_.flatMap以优雅的方式处理它:

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

正如您所看到的,它与map类似,只是您返回的是项目数组而不是项目。

答案 3 :(得分:0)

使用Array.filter()的另一种解决方案:

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

答案 4 :(得分:0)

我写的一个答案elsewhere涵盖了这一点,但是如果您希望能够完成Array.map()的转换但还要更改输出长度,则需要使用Array.reduce()

不过,通常情况下,进行过滤会更有意义-最好在进行映射之前进行过滤,但如果需要,则在之后进行过滤。