Javascript 使用JS/NodeJS在数据中搜索的更好方法

Javascript 使用JS/NodeJS在数据中搜索的更好方法,javascript,node.js,json,object,Javascript,Node.js,Json,Object,如果我有一个JSON文件,其中包含巨大的数据,则如下所示 { "completed": true, "completions": [ { "id": 123, "lead_time": 111, "result": [ {

如果我有一个JSON文件,其中包含巨大的数据,则如下所示

    {
                  "completed": true,
                  "completions": [
                    {
                  "id": 123,
                  "lead_time": 111,
                  "result": [
                    {

                      "id": "FQAWeIOlNO",
                      "value": {
                        "text": "some text for test"
                      }
                    }
                  ]
                }
              ],
              "data": {
                "url": "www.example.com/1_123_4.wav"
              },
              "id": 123
       }
我的代码应该是这样的:

arr.forEach((obj) => { //arr contains all the data from JSON

  id = obj.id
  let repeated = obj.data.url.replace('www.example.com/', '').split('.wav')
  fileName = repeated[0]
// here i want to make the search.
    }
因此,我通过forEach循环访问url部分,并获取filenName.wav

我想浏览所有URL,并检查是否存在另一个具有相同.wav名称的URL 因此,每次我必须从URL中获取一个.wav并循环遍历所有其他URL,这将花费时间O(N^2),这将非常耗时,因为我有太多的数据

我发现我可以使用对象来实现这种方法并在其中进行搜索,但我无法理解它们是如何工作的,或者我将如何在其中进行搜索。据我所知,对象总是会被覆盖,所以我希望能够充分利用它们(我不知道这是否正确)


如果有人知道更好的方法,这将是非常受欢迎的,如果有人可以指导我,如果对象是解决方案,我将非常感激。

使用对象,使用文件名作为键,使用数组作为值,可以通过时间O(n)实现结果。循环时检查对象是否存在密钥;如果是,则将url推送到数组

让arr=[
{
“完成”:正确,
“完成”:[{
“id”:123,
“交付周期”:111,
“结果”:[{
“id”:“FQAWeIOlNO”,
“价值”:{
“文本”:“一些测试文本”
}
}]
}],
“数据”:{
“url”:“www.example.com/1_123_4.wav”
},
“id”:123
},
{
“完成”:正确,
“完成”:[{
“id”:124,
“交付周期”:111,
“结果”:[{
“id”:“FQAWeIOlNO”,
“价值”:{
“文本”:“一些测试文本”
}
}]
}],
“数据”:{
“url”:“www.example1.com/1_123_4.wav”
},
“身份证”:124
},
{
“完成”:正确,
“完成”:[{
“id”:125,
“交付周期”:111,
“结果”:[{
“id”:“FQAWeIOlNO”,
“价值”:{
“文本”:“一些测试文本”
}
}]
}],
“数据”:{
“url”:“www.example.com/123_4.wav”
},
“身份证”:125
}
]
让隔离文件=arr.reduce((obj,rec)=>{
让url=rec.data.url
设urlspilt=url.split(“/”)
让fileName=urlspit[urlspit.length-1]
obj[fileName]=obj[fileName]| |【】
obj[fileName]。推送(url)
返回obj
},{})
console.log(按文件隔离)