замена ключевого объекта на значения массива - PullRequest
1 голос
/ 07 февраля 2020

У меня проблема с заменой ключей в объекте

let headers = ['title1', 'title2', 'title3']

let obj = {
    0: ['name1', 'name2, 'name3],
    1: ['example1', 'example2, 'example3],
    2: ['xx', 'yy, 'zz],
}

Я пытаюсь сделать следующее:

let obj = {
   'title1': ['name1', 'name2, 'name3],
   'title2': ['example1', 'example2, 'example3],
   'title3': ['xx', 'yy, 'zz],
}

Я не уверен, что мой подход правильный:

  Object.keys(obj).map((el, index, arr) => {
      headers.forEach((item, item_index) => {
          arr[item_index] = item
      })
  })

Когда я console.log(Object.keys(obj)) Я все еще получаю: 0,1,2 ....

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Object.values ​​ возвращает только значения из указанных obj и Object.fromEntries позволяет создавать новый объект на основе двухэлементного списка массивов:

let headers = ['title1', 'title2', 'title3'];

let obj = {
    0: ['name1', 'name2', 'name3'],
    1: ['example1', 'example2', 'example3'],
    2: ['xx', 'yy', 'zz']
};

let result = Object.fromEntries(Object.values(obj).map((v,i) => ([headers[i], v])));
console.log(result);
1 голос
/ 07 февраля 2020

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

const headers = ['title1', 'title2', 'title3']

const obj = {
    0: ['name1', 'name2', 'name3'],
    1: ['example1', 'example2', 'example3'],
    2: ['xx', 'yy', 'zz'],
}

const renameObj = (obj, keys) => {
  return keys.reduce((acc, key, index) => ({ ...acc, [key]: obj[index] }), {})
}

console.log(renameObj(obj, headers))

Надеюсь, это поможет <3 </p>

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