Skip to content

Commit ef8eddb

Browse files
committed
[HW-13.14/st-compl] query-obj-to-url
Converting "query/obj" into "query/str" for insertion to URL. Worth noting: - all this work (alternative solution). FS-dev: B-3 / JS basic
1 parent a5c7917 commit ef8eddb

File tree

1 file changed

+46
-0
lines changed
  • full-stack-dev/3-js-basic/13-objects/13-14-hw-10-query-obj-to-url

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Нужно написать функцию, которая принимает объект query c и возвращает строку для вставки в URL путь:
2+
// const query = {
3+
// search: 'Вася',
4+
// take: 10,
5+
// };
6+
// Пример строки:
7+
// search=Вася&take=10
8+
9+
const query = {
10+
search: 'Вася',
11+
take: 10,
12+
};
13+
14+
function getQueryStr(queryObj = {}) {
15+
// предварительная if/проверка на пустой объект не нужна (типа Object.keys(queryObj).length), т.к. данная цепочка методов и так хорошо/правильно отработает пустой массив.. если такое будет в итоге получится "пустая строка"
16+
const queryStr = Object.entries(queryObj)
17+
.map(([key, value]) => `${key}=${value}`)
18+
.join('&');
19+
20+
return queryStr;
21+
}
22+
23+
const result = getQueryStr(query);
24+
console.log(result); // "search=Вася&take=10"
25+
26+
// ?? альтернативное решение (на шаг вперёд)
27+
// Для реальных проектов значения в URL нужно кодировать. Это нужно на случай, если в значении попадутся спецсимволы, например, пробелы, & или кириллица (хотя с ней современные браузеры справляются). Для этого есть встроенная функция encodeURIComponent().
28+
29+
// function createQueryString(params) {
30+
// return Object.entries(params)
31+
// .map(
32+
// ([key, value]) =>
33+
// `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
34+
// )
35+
// .join('&');
36+
// }
37+
38+
// Пример с пробелом и русскими буквами
39+
// const myParams = {
40+
// city: 'Санкт-Петербург',
41+
// 'order by': 'name',
42+
// };
43+
44+
// console.log(createQueryString(myParams));
45+
// Вывод: "city=%D0%A1%D0%B0%D0%BD%D0%BA%D1%82-%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3&order%20by=name"
46+
// Такую строку поймёт любой сервер!

0 commit comments

Comments
 (0)