#javascript #reactjs #ecmascript-6
#javascript #reactjs #ecmascript-6
Вопрос:
Я пытаюсь добавить идентификаторы в массив, если они доступны, как показано ниже
export const extractOpaqueConstructionType = library => {
const opaqueConstructionSecondaryIds= [];
opaqueConstructionSecondaryIds.push(library?.exteriorWallId);
opaqueConstructionSecondaryIds.push(library?.exteriorFloorId);
opaqueConstructionSecondaryIds.push(library?.roofId);
opaqueConstructionSecondaryIds.push(library?.interiorWallId);
opaqueConstructionSecondaryIds.push(library?.interiorFloorId);
opaqueConstructionSecondaryIds.push(library?.belowGradeWallId);
opaqueConstructionSecondaryIds.push(library?.slabOnGradeId);
return { opaqueConstructions: opaqueConstructionSecondaryIds || null };
};
Я вызываю вышеуказанную функцию в другом месте, как показано ниже
extractSecondaryIds: library => {
const secondaryIds = {
...extractSourceOfData(library),
...extractOpaqueConstructionType(library), // this is where i am calling above function
...extractGlazingConstructionType(library)
};
return secondaryIds;
},
если все указанные выше идентификаторы, например (exteriorWallId, exteriorFloorId и т. Д.), Не определены, я получаю вывод из приведенной выше функции ( extractOpaqueConstructionType
), например opaqueConstructions: [null]
, where, поскольку я ожидаю, что это opaqueConstructions: null
так, если идентификаторы не определены
Может ли кто-нибудь предложить какие-либо идеи или альтернативные подходы к этому, которые были бы мне очень благодарны, заранее большое спасибо.
Комментарии:
1. может ли кто-нибудь, пожалуйста, предложить что-то неправильное в приведенном выше коде
2.
opaqueConstructionSecondaryIds || null
проверяет истинность массива (это всегда так), а не является ли какой-либо из элементов не-undefined
. Напишите явное условие, проверяющее это.3. не могли бы вы, пожалуйста, сообщить мне, как я могу исправить, и мне также нужно проверить наличие неопределенных. Спасибо
Ответ №1:
Он должен отфильтровать массив после ввода всех значений.
Кроме того, вы можете упростить код, просто удалив push-вызовы
export const extractOpaqueConstructionType = library => {
const opaqueConstructions = [
library?.exteriorWallId,
library?.exteriorFloorId,
library?.roofId,
library?.interiorWallId,
library?.interiorFloorId,
library?.belowGradeWallId,
library?.slabOnGradeId,
].filter(it => it !== null);
return { opaqueConstructions: opaqueConstructions.length ? opaqueConstructions : null };
}
Ответ №2:
Попробуйте, как показано ниже
export const extractOpaqueConstructionType = library => {
const opaqueConstructionSecondaryIds= [
library?.exteriorWallId
library?.exteriorFloorId,
library?.roofId,
library?.interiorWallId,
library?.interiorFloorId,
library?.belowGradeWallId,
library?.slabOnGradeId,
].filter(keyValue => keyValue!==undefine);
return { opaqueConstructions:opaqueConstructionSecondaryIds.length?
opaqueConstructionSecondaryIds : null };
};
Комментарии:
1. извините, я не могу использовать это, потому что в библиотеке есть другие свойства, которые я не хочу отправлять в массив
2. Как предположил @uke, его необходимо отфильтровать. Я отфильтровал
undefine
значение. Ссылка на фрагменты обновления.