Как написать оператор if в выражении функции стрелки?

я не получаю ожидаемого результата в приведенном ниже коде, просто хотел узнать, правильный ли способ добавить условие в синтаксис функции стрелки с использованием выражения.

const drugPriceErrors = [99, 85];

Case#1 
const messages = [{
  settlementCode: "99",
  settlementDesc: "test:test"
}]

Case#2 
const messages = [{
  settlementCode: "77",
  settlementDesc: "test"
}
];

Case#3 

const messages = [{
  settlementCode: "66",
  settlementDesc: "test:test"
}]


function validateEntries(messages) {
  if (!messages) {
    return []
  };

  let filteredMsg = messages.filter((item) => {
    if (!drugPriceErrors.includes(item.settlementCode)) {
      item.settlementDesc.includes(":")
    } else {
      return;
    }
  });

  return filteredMsg;
};

console.info(validateEntries(messages));

ожидаемый результат

Case#1 output should be 
    [{
      settlementCode: "99",
      settlementDesc: "test:test"
    }]

Case#2 output should be 

[]

Case#3 output 

[{
      settlementCode: "66",
      settlementDesc: "test:test"
    }]

Из filter() вы все время возвращаете undefined(ложное значение). Используйте return true, если вы хотите включить элемент в массив результатов, в противном случае верните false

Maheer Ali 27.05.2019 20:38

Стрелочные функции не имеют неявного возврата, когда вы даете им тело. item.settlementDesc.includes(":") должен быть return item.settlementDesc.includes(":").

Olian04 27.05.2019 20:40
.filter(item => !drugPriceErrors.includes(item.settlementCode) && item.settlementDesc.includes(":"))
GottZ 27.05.2019 21:22
Поведение ключевого слова "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) для оценки ваших знаний,...
1
3
765
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько я понимаю, вы хотите отфильтровать те объекты, которые соответствуют следующим критериям

  • SettlementCode не должно существовать в drugPriceErrors массиве ИЛИ
  • SettlementDesc должен содержать :

Вы можете исправить свой код следующим образом

  • Во-первых, поскольку drugPriceErrors — это массив чисел, преобразуйте settlementCode в число, используя +settlementCode
  • Если условие оценено как истинное, то есть settlementCode существует в drugPriceErrors, вернуть true
  • В противном случае верните, содержит ли settlementDesc:

const drugPriceErrors = [99,85];
const messages = [ {settlementCode:"99", settlementDesc: "test:test" }, {settlementCode:"66", settlementDesc: "test:test" },{settlementCode: "77",settlementDesc: "test"}];

function validateEntries(messages) {
  if (!messages) {
    return []
  };

  let filteredMsg = messages.filter((item) => {
    if (drugPriceErrors.includes(+item.settlementCode)) return true;
    else return item.settlementDesc.includes(":");
  });

  return filteredMsg;
};

console.info(validateEntries(messages));

Кроме того, вы также можете упростить свой код следующим образом

const drugPriceErrors = [99,85];
const messages = [ {settlementCode:"99", settlementDesc: "test:test" }, {settlementCode:"66", settlementDesc: "test:test" },{settlementCode: "77",settlementDesc: "test"}];   
    
 const result = messages.filter(v => drugPriceErrors.includes(+v.settlementCode) || v.settlementDesc.includes(":"));
 console.info(result);

да, я хочу сначала проверить, существует ли расселениеCode, возвращающий тот же массив, который был передан, он должен фильтроваться или наоборот, если расселениеCOde не существует, должна применяться логика фильтра, в случае, если есть одно сообщение и существует расселениеCode

hussain 27.05.2019 20:53
If settlementCode exist return same array можно пояснить?
Nikhil Aggarwal 27.05.2019 20:56

хорошо, если сообщения [ {settlementCode:"99", settlementDesc: "test:test" }] что будет возвращать validateEntries, он должен возвращать этот объект

hussain 27.05.2019 20:59

Все еще не ясно. Можете ли вы объяснить причину ожидаемого результата в вопросе

Nikhil Aggarwal 27.05.2019 21:05

на самом деле есть два сценария, если расчётный код существует, он не должен фильтровать возвращаемый массив массива, поскольку он был передан, и если расчётный код не существует, а сообщение содержит «:», затем примените фильтр и верните объект

hussain 27.05.2019 21:09

Хорошо. Итак, в вопросе, расселениеCode 99 существовало даже тогда, когда вы вернули полный массив и отфильтровали его.

Nikhil Aggarwal 27.05.2019 21:10

как не фильтровать 99 Код населенного пункта существует

hussain 27.05.2019 21:12

Каков ожидаемый результат - [ {settlementCode:"99", settlementDesc: "test:test" }, {settlementCode:"66", settlementDesc: "test:test" }, {settlementCode:"18", settlementDesc: "test:test" }, {settlementCode:"85", settlementDesc: "testing" }]

Nikhil Aggarwal 27.05.2019 21:17

добавлено 3 случая для большего понимания и ожидаемого результата

hussain 27.05.2019 21:25

Верно. Приведенное выше решение учитывает все 3 случая.

Nikhil Aggarwal 27.05.2019 21:26
messages.filter(v => drugPriceErrors.includes(+v.settlementCode что означает +v в коде
hussain 30.05.2019 19:31

Он преобразует v.settlementCode в число. Это необходимо, потому что drugPriceErrors — это массив чисел, а v.settlementCode — это строка.

Nikhil Aggarwal 30.05.2019 20:04

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