Поиск имени строки внутри объекта с пробелами

У меня есть такой объект, который содержит строковое имя с пробелами:

{
 xxx: "/xxx/",
 name: "string with spaces",
 items: {
  method: "GET",
 }
}

Я ищу в своем запросе имя, чтобы получить объект item этого, например:

http://localhost:3000?$name=test

Но как мне теперь искать строку с пробелами, как это:

http://localhost:3000?$name=string with spaces

Вот процесс того, как все работает:

если я не укажу имя в запросе, например, http://localhost:3000?$name= , я получу следующее:

[
 {
  name: "admin",
  item: [xxx]
 },
 {
  name: "auth",
  item: [xxx]
 }
]

Например, если я укажу объект с именем admin следующим образом: http://localhost:3000?$name=admin , я получу следующее:

[
 {
  name: "manage users",
  items: {}
 },
 {
  name: "Get user`",
  items: {}
 }
]

Теперь я пытаюсь добавить в запрос имя с такими пробелами, как это: http://localhost:3000?$name=admin/manage users чтобы я также мог получать его элементы.

Когда я попробую следующий код:

  const { $name } = req.query;

  const name = $name.split('/');
  let currentItem = req.doc;

  name.forEach((name) => {
    const decoded = decodeURIComponent(name);
    currentItem.forEach((entry) => { 
      if (entry.name === decoded) {
        currentItem = entry.item; 
      }
    });
  });

Все работает нормально, если нет пробелов, но как только я ищу что-то с пробелами, тогда i get undefined for the entry.item но как только я i get undefined for the entry.item вход в систему, я получаю расшифрованное введенное имя.

Всего 1 ответ


Это будет URI-кодирование - используйте decodeURIComponent чтобы получить то, что вы хотите:

 const encoded = encodeURIComponent("string with spaces"); const decoded = decodeURIComponent(encoded); console.log(encoded); console.log(decoded); 
 .as-console-wrapper { max-height: 100% !important; top: auto; }