Игнорировать или удалять объект с нулевым значением в сокращении

В моем 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-адрес равен нулю, как я могу его игнорировать, чтобы он не создавался в объекте, что означает, что если URL-адрес равен нулю, он должен его пропустить.

Может это return this.props.mission.links[key] ? [...array, {url: this.props.mission.links[key], name:key}] : array;

Hassan Imam 07.06.2018 15:16

как насчет `return [... array, {url: this.props.mission.links [key]! == undefined?» this.props.mission.links [ключ]: "", имя: ключ}] `?

Osvaldo Maria 07.06.2018 15:16

точно, используйте ternary op ИЛИ if (), чтобы судить о url

Ankush Rathi 07.06.2018 15:18

Спасибо @Hassan Imam, что сработало

Almog Koren 07.06.2018 15:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
1 647
3

Ответы 3

Самым простым решением было бы добавить условие в ваш редуктор:

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}]
}, []);

Но обратите внимание, что этот случай (в общем) лучше соответствует карте, чем сокращает:

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

Нужно сделать следующее

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

Вы можете сначала применить фильтр, чтобы получить только ключи с ненулевыми значениями:

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}] }, [])

Другие вопросы по теме