Соедините ключ объекта и дочернее значение друг с другом для массива объектов - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть массив объектов, которые я пытаюсь переставить.

Я пробовал комбинацию Object.keys(), Object.values() и .map(), но не смог найти решение.

let samples = [
  {
    Nitrogen: { units: "mg/L", value: 2 },
    Phosphorus: { units: "mg/L", value: 4 }
  }, {
    Nitrogen: { units: "mg/L", value: 2 },
    Phosphorus: { units: "mg/L", value: 4 }
  }
]

Надеюсь взятьдочернее значение каждого элемента в массиве и переместить его на уровень.

Ожидаемый результат:

let samplesValues = [
  { Nitrogen: 2, Phosphorus: 4 },
  { Nitrogen: 2, Phosphorus: 4 }
]

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Вы можете map для массива и reduce для каждого объекта.

const samples = [{Nitrogen: {units: "mg/L", value: 2}, Phosphorus: {units: "mg/L", value: 4}}, {Nitrogen: {units: "mg/L", value: 2}, Phosphorus: {units: "mg/L", value: 4}}];

const out = samples.map(obj => {
  const keys = Object.keys(obj);
  return keys.reduce((acc, key) => {
    const { value } = obj[key];
    return {...acc, [key]: value };
  }, {});
});

console.log(out);

Редактировать: да, и это довольно изящный трюк. Вы просто назначаете value значение по умолчанию obj[key].

const samples = [{sampleID: 1, Nitrogen: {units: "mg/L", value: 2}, Phosphorus: {units: "mg/L", value: 4}}, {sampleID: 2, Nitrogen: {units: "mg/L", value: 2}, Phosphorus: {units: "mg/L", value: 4}}];

const out = samples.map(obj => {
  const keys = Object.keys(obj);
  return keys.reduce((acc, key) => {
    const { value = obj[key] } = obj[key];
    return {...acc, [key]: value };
  }, {});
});

console.log(out);
0 голосов
/ 24 апреля 2019

При использовании карты и возвращении переменной как key всегда используйте [key]

let samples = [{
  Nitrogen: {
    units: "mg/L",
    value: 2
  },
  Phosphorus: {
    units: "mg/L",
    value: 4
  }
}, {
  Nitrogen: {
    units: "mg/L",
    value: 2
  },
  Phosphorus: {
    units: "mg/L",
    value: 4
  }
}]

let sampleValues = samples.map(sample => {
  const keys = Object.keys(sample);
  return keys.map(key => {
    return {
      [key]: sample[key].value
    };
  });
})


console.log(sampleValues);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...