在reduce中忽略或删除null为null的对象

时间:2018-06-07 13:09:40

标签: javascript reactjs

我的js代码中有以下内容:

// Format the links 
const newLinks = Object.keys(this.props.mission.links).reduce((array, key) => {
  return [...array, {url: this.props.mission.links[key], name:key}]
}, []);

创建我的对象:

{ url: "https://i.imgur.com/03gonKW.png", name: "mission_patch" }

但是有些情况下url为null我怎么能忽略它,所以它没有在对象中创建,这意味着如果url为null,它应该跳过它。

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是在reducer中添加一个条件:

const newLinks = Object.keys(this.props.mission.links).reduce((array, key) => {
  if(!this.props.mission.links[key]) {
    return array;
  }
  return [...array, {url: this.props.mission.links[key], name:key}]
}, []);

但是,请注意,这种情况(一般情况下)匹配map更好,然后reduce:

const links = this.props.mission.links;
const newLinks = Object.keys(links)
  .filter(key => !!links[key])
  .map(key => ({url: links[key], name: key}));

答案 1 :(得分:0)

需要执行以下操作

return this.props.mission.links[key] ? [...array, {url: this.props.mission.links[key], name:key}] : array;

答案 2 :(得分:0)

您可以先应用过滤器以仅获取非空值的键:

let filteredKeys = Object.keys(this.props.mission.links).filter((key) => !!this.props.mission.links[key])

然后应用你的减少,你也可以链接这些操作:
let result = Object.keys(this.props.mission.links).filter((key) => !!this.props.mission.links[key]).reduce((array, key) => { return [...array, {url: this.props.mission.links[key], name:key}] }, [])