как получить весь объект методом записи объекта - PullRequest
1 голос
/ 25 февраля 2020

Я дал пример объекта, как это ниже, и я изменяю и назначаю тот же объект снова с кодом ниже

    value:
        id: "d5eb174c6bb34ab9a801d71465f71495"
        environmentSource: {id: "ca227b7be6e74008ad79115687b84c3d", name: "ashare12", edition: "v23", __typename: "Guideline"}
        category: "office"
        spaceFunction: "equipment"
        revision: 1
        conditionType: "HEATING"
        coolingSetPointOccupied: 1
        coolingSetPointUnOccupied: 3
        heatingSetPointOccupied: 1
        heatingSetPointUnOccupied: 2
        temperatureTolerance: 7
        relativeHumidityMax: 4
        relativeHumidityMin: 5
        realtiveHumidityTolerance: 2

, где я пытаюсь заменить значение conditionType HEATING на Heating на приведенный ниже код

  Object.entries(code).map(([key, value]) => {
  if (key === 'conditionType') {
    value = getEnumLabel(conditionTypeData.conditionType, value);
  }
  return value;
})

и он возвращается ниже вывода

    value: Array(15)

        0: "d5eb174c6bb34ab9a801d71465f71495"
        1: {id: "ca227b7be6e74008ad79115687b84c3d", name: "ashare12", edition: "v23", __typename: "Guideline"}
        2: "office"
        3: "equipment"
        4: 1
        5: "Heating"
        6: 1
        7: 3
        8: 1
        9: 2
        10: 7
        11: 4
        12: 5
        13: 6
        14: "LibraryEnvironment"

, но я ищу желаемый вывод, подобный приведенному ниже

    value:
        id: "d5eb174c6bb34ab9a801d71465f71495"
        environmentSource: {id: "ca227b7be6e74008ad79115687b84c3d", name: "ashare12", edition: "v23", __typename: "Guideline"}
        category: "office"
        spaceFunction: "equipment"
        revision: 1
        conditionType: "Heating"
        coolingSetPointOccupied: 1
        coolingSetPointUnOccupied: 3
        heatingSetPointOccupied: 1
        heatingSetPointUnOccupied: 2
        temperatureTolerance: 7
        relativeHumidityMax: 4
        relativeHumidityMin: 5
        realtiveHumidityTolerance: 2

Может кто-нибудь, пожалуйста помогите в этом, как получить весь объект из object.entries или любым другим способом сделать это, что было бы мне благодарно

большое спасибо заранее

Обновление: это будет фактическая функция, где я я делаю это

 const environmentSourceTypeOptions = 
     environmentSourceTypeData.libraryEnvironment.map(code => ({
label: `${code.environmentSource.name} ,
        ${code.environmentSource.edition} -
        ${code.category} -
        ${code.spaceFunction} -
       Rev ${code.revision}`,
key: code.id,
value: Object.entries(code).map(([key, value]) => {
  if (key === 'conditionType') {
    value = getEnumLabel(conditionTypeData.conditionType, value);
  }
  return value;
})
 }));

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Это, кажется, делает это:

// main operation
const environmentSourceTypeOptions = 
  environmentSourceTypeData .libraryEnvironment .map(code => ({
    label: `${code .environmentSource .name}, ${code .environmentSource .edition} - ${code .category} - ${code .spaceFunction} - Rev ${code .revision}`,
    key: code.id,
    value: {
      ... code,
      conditionType: getEnumLabel (conditionTypeData .conditionType, code .conditionType)
    }
 }));

console .log (environmentSourceTypeOptions)
.as-console-wrapper {min-height: 100% !important; top: 0}
<script>
// Dummy implementation and data for `getEnumLabel`
const conditionTypeData = {conditionType: { HEATING: 'Heating' }}
const getEnumLabel = (vals, value) => vals [value]

// Data
const environmentSourceTypeData = {libraryEnvironment: [{id: "d5eb174c6bb34ab9a801d71465f71495", environmentSource: {id: "ca227b7be6e74008ad79115687b84c3d", name: "ashare12", edition: "v23", __typename: "Guideline"}, category: "office", spaceFunction: "equipment", revision: 1, conditionType: "HEATING", coolingSetPointOccupied: 1, coolingSetPointUnOccupied: 3, heatingSetPointOccupied: 1, heatingSetPointUnOccupied: 2, temperatureTolerance: 7, relativeHumidityMax: 4, relativeHumidityMin: 5, realtiveHumidityTolerance: 2}]}
</script>

Единственная важная часть здесь находится в узле value, где мы просто делаем простое создание объекта: {... code, conditionType: getEnumLabel (conditionTypeData .conditionType, code .conditionType)}.

Вам просто не нужно перебирать все ключи по отдельности, чтобы сделать это.

0 голосов
/ 25 февраля 2020

Используя карту, вы создаете новый массив вместо изменения объекта. Вот документация для карты Если вы хотите изменить объект (или создать новый), попробуйте перебрать ключи объекта с помощью forEach . Вот пример, который мутирует оригинал:

const widget = {
  id: "d5eb174c6bb34ab9a801d71465f71495",
  environmentSource: {
    id: "ca227b7be6e74008ad79115687b84c3d",
    name: "ashare12",
    edition: "v23",
    __typename: "Guideline"
  },
  category: "office",
  spaceFunction: "equipment",
  revision: 1,
  conditionType: "HEATING",
  coolingSetPointOccupied: 1,
  coolingSetPointUnOccupied: 3,
  heatingSetPointOccupied: 1,
  heatingSetPointUnOccupied: 2,
  temperatureTolerance: 7,
  relativeHumidityMax: 4,
  relativeHumidityMin: 5,
  realtiveHumidityTolerance: 2
};

Object.entries(widget).forEach(([key, value]) => {
  if (key === 'conditionType') {
    widget[key] = getEnumLabel(key, value)
  }
});

// without seeing your code, I opted to write a simple function that formats the value as you expect it. I'm using lodash because lodash makes life easy.
function getEnumLabel(type, value) {
  return _.capitalize(value);
}

console.log('result:');
console.log(widget);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...