在带空格的对象内搜索字符串名称

时间:2019-05-18 00:26:10

标签: javascript arrays node.js object ecmascript-6

我有一个像这样的对象,其中包含带有空格的字符串名称:

{
 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,但一旦我在控制台上登录条目,然后输入的名称就会被解码。

1 个答案:

答案 0 :(得分:2)

它将进行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; }