Преобразование объекта массивов в объекты объектов - PullRequest
0 голосов
/ 03 марта 2020

В настоящее время мои данные выглядят так:

{
    numberOne: [{
        timestamp: 3829383,
        value: 20323.23
    }],
    numberTwo: [{
        timestamp: 2382342,
        value: 120912.1
    }]
    ...
}

И я хочу получить их в этом формате

{
    numberOne: {
        timestamp: 3829383,
        value: 20323.23
    },
    numberTwo: {
        timestamp: 2382342,
        value: 120912.1
    }
    ...
}

Я пробовал Object.assign, .map(), .filter() ... ничего не работает!

Любые мысли о том, как я мог бы сделать эту работу, были бы очень полезны

Ответы [ 4 ]

0 голосов
/ 03 марта 2020

Вы можете перестроить объект, используя , уменьшите , чтобы перебрать Object.entries (который дает вам массив ключа и значения):

const data = {
  numberOne: [{
    timestamp: 3829383,
    value: 20323.23
  }],
  numberTwo: [{
    timestamp: 2382342,
    value: 120912.1
  }]
}

// Grab the entries and iterate over each
// destructuring out the key and value from the array
const out = Object.entries(data).reduce((acc, [key, value]) => {

  // Set the key on the initial object (acc), and set
  // the value to be the first element of the value array
  acc[key] = value[0];

  // Return the initial object (acc) for the next iteration
  return acc;
}, {});

console.log(out);
0 голосов
/ 03 марта 2020

Вы можете использовать for (var key in obj) l oop и установить желаемое значение для каждой клавиши:

var obj = {
    numberOne: [{ timestamp: 3829383, value: 20323.23 }],
    numberTwo: [{ timestamp: 2382342, value: 120912.1 }]
};
console.log("Before -->", obj);

for (var key in obj) {
   obj[key] = obj[key][0]; // take item 0 from each array
}
console.log("After -->", obj);
0 голосов
/ 03 марта 2020

Перечислите записи в объекте, вытащите первый элемент в каждом массиве и создайте объект с ключом и элементом.

const data = { numberOne: [{ timestamp: 3829383, value: 20323.23 }], numberTwo: [{ timestamp: 2382342, value: 120912.1 }] }

const transform = (arr) => 
    Object.entries(arr).reduce((acc,[k,[v]]) => (acc[k] = v, acc), {})

console.log(transform(data))

Или вы можете использовать Object.fromEntries :

const data = { numberOne: [{ timestamp: 3829383, value: 20323.23 }], numberTwo: [{ timestamp: 2382342, value: 120912.1 }] }

const transform = (arr) => 
    Object.fromEntries(Object.entries(arr).map(([k,[v]]) => [k, v]))

console.log(transform(data))
0 голосов
/ 03 марта 2020

Вы можете преобразовать входной объект, используя Object.entries(), .reduce() и некоторые Разрушение массива в желаемый результат:

const data = {
  numberOne: [{ timestamp: 3829383, value: 20323.23 }],
  numberTwo: [{ timestamp: 2382342, value: 120912.1 }]
};

const result = Object.entries(data)
                     .reduce((r, [k, [v]]) => (r[k] = v, r), {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...