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