【问题标题】:Remove object key prefixes nodejs删除对象键前缀 nodejs
【发布时间】:2017-08-15 18:56:28
【问题描述】:

这是我的第一篇文章。我不喜欢在论坛上寻求帮助,但我别无选择。我花了很多天试图解决这个问题,但我没有找到任何解决方案。

我所有的问题都是从返回这个的数据库查询开始的。

{
"prod_format": "400 ml",
"prod_brand": "Marca",
"prod_image": "192.168.1.45/mini/1046332bb531ab3.jpg",
"prod_name": "Gel de baño o ducha",
"prod_pvp": 2.20,
"prod_shops": [
  {
    "prod_price": 2.29,
    "prod_shop": {
      "prod_shopID": 2,
      "prod_shop_name": "Tienda",
      "prod_shop_image": "192.168.1.45/shops/d4d4sw2.jpg"
    }
  },
  {
    "prod_price": 2.19,
    "prod_shop": {
      "prod_shopID": 5,
      "prod_shop_name": "Tienda",
      "prod_shop_image": "192.168.1.45/shops/g4hbe72.jpg"
    }
  }
]
}

在这种情况下,我想删除键的前缀,prod_ 和 shop_。

我不能手动执行此操作,因为这只是我使用的多个查询之一,并且此数据可能会更改,我需要一个删除这些前缀的动态函数,以便与更多前缀和更多查询一起使用。

到目前为止我一直在尝试:

  • 调用自身重新映射对象内部的递归函数 数组,但它不起作用,因为 NodeJS 是异步的并且会生成 永无止境的循环。
  • 使用获取所有键/值的列表函数来创建新对象 使用重命名的键,但我找不到任何适用于复杂的东西 对象。
  • 使用链式承诺,我不知道它有效,但我认为 这是最好的方法。

总之,我想要一个函数,如果我放置上层对象,我会得到这个代码。

{
"format": "400 ml",
"brand": "Marca",
"image": "http://192.168.1.45/mini/1046332bb531ab3.jpg",
"name": "Gel de baño o ducha",
"pvp": 2.20,
"shops": [
  {
    "price": 2.29,
    "shop": {
      "shopID": 2,
      "name": "Tienda",
      "image": "http://192.168.1.45/shops/d4d4sw2.jpg"
    }
  },
  {
    "price": 2.19,
    "shop": {
      "shopID": 5,
      "name": "Tienda",
      "image": "http://192.168.1.45/shops/g4hbe72.jpg"
    }
  }
]
}

PS: 我无法编辑原始对象,因为它来自elasticsearch,我无法编辑对象键。

先谢谢了,希望有人能帮助我。

【问题讨论】:

    标签: javascript arrays json node.js javascript-objects


    【解决方案1】:

    为什么不简单地将 Json 数据视为字符串,然后将 '"_prod' 替换为 '"'?这将删除该前缀的所有出现。

    myJsonString.replace('"_prod', '"');
    

    更新:如果您的值可能包含您的前缀,则最好使用正则表达式,以确保您只更改键。

    【讨论】:

    • 如果接收到的数据中有“_prod”而不是键怎么办?这不太可能发生,但绝对有可能
    • 赞成,但我会指出,从他的示例来看,他似乎需要一个正则表达式来匹配键并仅保留最后一个下划线之后的字符。
    • 那么你不应该使用它。如果发生这种情况,我会使用正则表达式以更安全的方式完成这项工作。
    • 虽然不完美但我可以工作,它是一个临时补丁 JSON.parse(JSON.stringify(prodInfo._source).replace(new RegExp("prod_","g"),' ').replace(new RegExp("shop_","g"),''));
    猜你喜欢
    • 2023-03-22
    • 2016-11-25
    • 2013-06-10
    • 2021-07-08
    • 1970-01-01
    • 2012-01-26
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多