Создание объекта в правильном формате - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать объект в определенном формате и у меня возникают проблемы с получением нужных мне данных.

Это моя функция:

arr.forEach(headers => {
    let heads = headers.replace(/_/g, ' ');
    const metrics = {
        'cht': {
            headers: {
                'name': heads
            }
        }
    }
    console.log(metrics);
});

Мой результат:

{cht: {headers: {name: "Hello World"}}}

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

{cht: {Hello_World: {name: "Hello World"}}}

Почему не значение headers (вырезать) заменяется в моем объекте? Мне нужны заголовки, чтобы они были Hello_World.

Ответы [ 6 ]

3 голосов
/ 09 апреля 2020

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

В более новых версиях из Javascript (ECMAScript 6 на), вы можете заключить скобки вокруг имени, чтобы само значение переменной использовалось в качестве ключа свойства.

arr.forEach(headers => {
    let heads = headers.replace(/_/g, ' ');
    const metrics = {
        cht: {
            [headers]: heads
        }
    }
    console.log(metrics);
});
1 голос
/ 09 апреля 2020

У вас это задом наперед, первый заменяемый параметр - это RegExp, который нужно найти, второй параметр - чем заменить его. Это должно быть headers.replace(/ /g, '_').

arr.forEach(headers => {
    const newHeader = headers.replace(/ /g, '_');
    const metrics = {
        cht: {
            [newHeader]: {
               name: headers
            }
        }
    };
    console.log(metrics);
});
0 голосов
/ 09 апреля 2020

вы можете использовать следующие

headers.split(" ").join("_");

ИЛИ

headers.replace(/ /g, '_')
0 голосов
/ 09 апреля 2020

Используйте split и map для получения ожидаемого результата.

const capitalize = (str) => `${str.charAt(0).toUpperCase()}${str.slice(1)}`;
const normalization = (name = "") => {
  if (!name) return name;
  return name.split(/\s+/).map(capitalize).join("_");
};
const transform = (arr) => {
  arr.forEach((headers = "") => {
    let heads = normalization(headers);
    const metrics = {
      cht: {
        [heads]: {name: headers}
      },
    };
    console.log(metrics);
  });
};

const arr = ["hello world", "test    some  thing"];

transform(arr);
0 голосов
/ 09 апреля 2020

Если вы предоставляете headers = 'Hello World'. headers заменяется .

Ваш шаблон замены ищет литерал _, который должен быть заменен символом пробела. String.prototype.replace(pattern, replacement).

Но похоже, что вы пытаетесь сделать обратное.

replace(/\s/g, '_') или просто replace(' ', '_') приведет к 'Hello_World'.

0 голосов
/ 09 апреля 2020

Значение, которое вы назначаете в качестве замененных «заголовков», которые вы задали в качестве «заголовков» переменной.

Затем вы назначаете его как значение для свойства 'name'. Вместо этого вы хотели установить его как свойство для заголовков?

let heads = headers.replace(/_/g, ' ');
    const metrics = {
        'cht': {
            headers: {
                heads: 'someValue'
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...