ввод разных идентификаторов в массив и получение массива, если все идентификаторы не определены

#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 значение. Ссылка на фрагменты обновления.