首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何跳过.map()中的元素?

如何跳过.map()中的元素?
EN

Stack Overflow用户
提问于 2014-07-17 22:48:16
回答 12查看 502K关注 0票数 643

如何跳过.map中的数组元素

我的代码:

代码语言:javascript
运行
复制
var sources = images.map(function (img) {
    if(img.src.split('.').pop() === "json"){ // if extension is .json
        return null; // skip
    }
    else{
        return img.src;
    }
});

这将返回:

代码语言:javascript
运行
复制
["img.png", null, "img.png"]
EN

回答 12

Stack Overflow用户

发布于 2017-02-13 08:12:30

这里有一个有趣的解决方案:

代码语言:javascript
运行
复制
/**
 * Filter-map. Like map, but skips undefined values.
 *
 * @param callback
 */
function fmap(callback) {
    return this.reduce((accum, ...args) => {
        let x = callback(...args);
        if(x !== undefined) {
            accum.push(x);
        }
        return accum;
    }, []);
}

bind operator一起使用

代码语言:javascript
运行
复制
[1,2,-1,3]::fmap(x => x > 0 ? x * 2 : undefined); // [2,4,6]
票数 18
EN

Stack Overflow用户

发布于 2017-10-24 09:32:45

回答sans多余的边缘情况:

代码语言:javascript
运行
复制
const thingsWithoutNulls = things.reduce((acc, thing) => {
  if (thing !== null) {
    acc.push(thing);
  }
  return acc;
}, [])
票数 14
EN

Stack Overflow用户

发布于 2018-06-27 17:34:17

为什么不直接使用forEach循环呢?

代码语言:javascript
运行
复制
let arr = ['a', 'b', 'c', 'd', 'e'];
let filtered = [];

arr.forEach(x => {
  if (!x.includes('b')) filtered.push(x);
});

console.log(filtered)   // filtered === ['a','c','d','e'];

或者更简单地使用filter:

代码语言:javascript
运行
复制
const arr = ['a', 'b', 'c', 'd', 'e'];
const filtered = arr.filter(x => !x.includes('b')); // ['a','c','d','e'];
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24806772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档