я не получаю ожидаемого результата в приведенном ниже коде, просто хотел узнать, правильный ли способ добавить условие в синтаксис функции стрелки с использованием выражения.
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(":"))
Насколько я понимаю, вы хотите отфильтровать те объекты, которые соответствуют следующим критериям
SettlementCode
не должно существовать в drugPriceErrors
массиве ИЛИSettlementDesc
должен содержать :
Вы можете исправить свой код следующим образом
drugPriceErrors
— это массив чисел, преобразуйте settlementCode
в число, используя +settlementCode
settlementCode
существует в 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