Разбор значений строки в другом объекте angular - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть такая строка

 const resultComing ='access_token=test&token_type=bearer&state=state&expires_in=43199&scope=test';

Мне нужно передать объект, который будет выглядеть следующим образом

const result: any = {
  access_token: test,
  token_type: bearer,
  state: state,
  expires_in: 43199,
  scope: test
};

Я пробовал вот так

const result: any = resultComing.split('&').reduce(function (result: any, item: string) {
  const parts = item.split('=');
  result[parts[0]] = parts[1];
}, {});

Но я получил ошибку, TypeError: Невозможно установить свойство 'token_type' из неопределенного

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Ваша функция не работает, потому что, как сказал Ниет, вы ничего не возвращаете из функции Array.reduce () , и поэтому в следующий раз, когда она выполнит итерацию по ней, result будет неопределенным.

Чтобы исправить это, просто верните результат в конце:

const result: any = resultComing.split('&').reduce(function (result: any, item: string) {
    const parts = item.split('=');
    result[parts[0]] = parts[1];
    return result;
}, {});

Если вам не нужна функция стрелки, вы также можете go над своими парами с помощью простого l oop :

let obj: any = {};
let pairs = resultComing.split('&');

for (let pair of pairs) {
    let parts = pair.split('=');
    obj[parts[0]] = parts[1];
}

Playground Link

0 голосов
/ 15 апреля 2020
Обратный вызов

.reduce() ожидал, что что-то будет return ed.

const [k,v] = item.split("=");
result[k] = v;
return result;

Вот почему вы получаете ошибку только на секунде ключе. Для первого ключа он передает ваше «начальное» значение {} в функцию и работает просто отлично, но поскольку функция ничего не делает return, то второй вызов имеет undefined, и вы не можете установить свойства на этом.

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

Массив результатов, который вы вызываете в следующей строке, никогда не инициализируется и поэтому.

result[parts[0]] = parts[1];

попробуйте следующее:

const result: any = {};
resultComing.split('&').reduce(function (result: any, item: string) {
  const parts = item.split('=');
  result[parts[0]] = parts[1];
}, {});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...