Объединить значения карты в одну строку - PullRequest
1 голос
/ 14 июля 2020

У меня такой код:

let urls = new Map<string, any[]>();
urls.set("1", ["param=1", "param2=2", "params3=3"]);
urls.set("2", ["param4=4", "param5=5"]);


function getUrl(): string {
  let _tmp = []; 
  urls.forEach((e) => { 
    _tmp.push(e.join("&"));
  });

  return _tmp.join("&");

}

getUrl();

В результате мне нужно получить одну полную строку: param=1&param2=2&params3=3&param4=4&param5=5

Мне не нравится временная переменная let _tmp = [];, как это улучшить ?

Ответы [ 4 ]

2 голосов
/ 14 июля 2020

Это то, что вам нужно?

const urls = new Map()
urls.set("1", ["param=1", "param2=2", "params3=3"])
urls.set("2", ["param4=4", "param5=5"])

const result = Array.from(urls.values()).flat().join('&')
    
console.log(result)
2 голосов
/ 14 июля 2020

Думаю, у вас должно получиться;)

let urls = new Map();
urls.set("1", ["param=1", "param2=2", "params3=3"]);
urls.set("2", ["param4=4", "param5=5"]);
let result = Array.from(urls.values()).map(arr => arr.join('&')).join('&');
console.log(result);

Вы также можете сделать это немного проще, используя .flat, но тогда вам нужно добавить es2019 в раздел библиотеки tsconfig.json , потому что .falt отсутствует в официальной спецификации. Подробнее об этом вы можете прочитать здесь: Typescript flatMap, flat, flatten не существует для типа any []

Array.from(urls.values()).flat().join('&')
0 голосов
/ 14 июля 2020

Если вам действительно нужно использовать карту массивов, то будет работать следующее:

let urls = new Map<string, any[]>();
urls.set("1", ["param=1", "param2=2", "params3=3"]);
urls.set("2", ["param4=4", "param5=5"]);

function getUrl(): string {
    const sep = '&';
    return Array.from(urls.values())
        .map((params) => {
        return params.join(sep)
    })
    .join(sep);
}

getUrl();
0 голосов
/ 14 июля 2020

Вы можете отображать внешние значения, а внутри них вы можете отображать внутренние значения при объединении.

let urls = {
  '1': [ 'param=1', 'param2=2', 'params3=3' ],
  '2': [ 'param4=4', 'param5=5' ]
}

function getUrl() {
  return Object.values(urls).map(values => values.join('&')).join('&')
}

console.log(getUrl())

Вот эквивалент TypeScript:

let urls = new Map<string, any[]>();
urls.set("1", ["param=1", "param2=2", "params3=3"]);
urls.set("2", ["param4=4", "param5=5"]);


function getUrl(): string {
    return Array.from(urls.values()).map(values => values.join('&')).join('&')
}

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