я не получаю ожидаемого результата в приведенном ниже коде, просто хотел узнать, правильный ли способ добавить условие в синтаксис функции стрелки с использованием выражения.
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"
}]
Стрелочные функции не имеют неявного возврата, когда вы даете им тело. item.settlementDesc.includes(":") должен быть return item.settlementDesc.includes(":").
.filter(item => !drugPriceErrors.includes(item.settlementCode) && item.settlementDesc.includes(":"))


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Насколько я понимаю, вы хотите отфильтровать те объекты, которые соответствуют следующим критериям
SettlementCode не должно существовать в drugPriceErrors массиве ИЛИSettlementDesc должен содержать :Вы можете исправить свой код следующим образом
drugPriceErrors — это массив чисел, преобразуйте settlementCode в число, используя +settlementCodesettlementCode существует в drugPriceErrors, вернуть truesettlementDesc: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
If settlementCode exist return same array можно пояснить?
хорошо, если сообщения [ {settlementCode:"99", settlementDesc: "test:test" }] что будет возвращать validateEntries, он должен возвращать этот объект
Все еще не ясно. Можете ли вы объяснить причину ожидаемого результата в вопросе
на самом деле есть два сценария, если расчётный код существует, он не должен фильтровать возвращаемый массив массива, поскольку он был передан, и если расчётный код не существует, а сообщение содержит «:», затем примените фильтр и верните объект
Хорошо. Итак, в вопросе, расселениеCode 99 существовало даже тогда, когда вы вернули полный массив и отфильтровали его.
как не фильтровать 99 Код населенного пункта существует
Каков ожидаемый результат - [ {settlementCode:"99", settlementDesc: "test:test" }, {settlementCode:"66", settlementDesc: "test:test" }, {settlementCode:"18", settlementDesc: "test:test" }, {settlementCode:"85", settlementDesc: "testing" }]
добавлено 3 случая для большего понимания и ожидаемого результата
Верно. Приведенное выше решение учитывает все 3 случая.
messages.filter(v => drugPriceErrors.includes(+v.settlementCode что означает +v в коде
Он преобразует v.settlementCode в число. Это необходимо, потому что drugPriceErrors — это массив чисел, а v.settlementCode — это строка.
Из
filter()вы все время возвращаетеundefined(ложное значение). Используйте returntrue, если вы хотите включить элемент в массив результатов, в противном случае вернитеfalse