如何提高此 json 搜索的效率
How to improve efficiency of this json search
我有一些 json 数据:
var data = {
"version": "2.0",
"result": {
"0": [418789, 418790, 418791],
"1": [431961, 431962, 431963],
}
};
我有我正在寻找的值 x,在这种情况下 x = 431962
为此,我编写了下面提供的搜索功能:
for (var i = 0; i < Object.keys(data.result).length; i++) {
for (var p = 0; p < Object.values(data.result)[i].length; p++) {
if (Object.values(data.result)[i][p] == 418789) {
console.log(Object.keys(data.result)[i])
}
}
}
但是我的问题是这个搜索函数由 2 个嵌套的 for 循环组成,因此在搜索大量 JSON 数据时速度非常慢,但是我似乎无法想出一个关于如何提高效率和速度的解决方案。
此搜索试图找到值 x 存在于哪个键中,其中键名称实际上是随机名称,没有特定顺序,并且 JSON 数据有几千个键,每个数组包含大约从 1 到 1,000,000 的 50 个值
您可以做的一项改进是存储对您正在使用的特定 object/array 的引用,这样您就不必 return 回到 Object.keys(... ) 一次又一次。
let data = {
"version": "2.0",
"result": {
"0": [418789, 418790, 418791],
"1": [431961, 431962, 431963],
}
};
function findWhichArrayContainsValue(val) {
for (key in data.result) {
const candidateArray = data.result[key];
if (candidateArray.includes(val)) {
return candidateArray;
}
}
return undefined;
}
console.log(findWhichArrayContainsValue(418789));
console.log(findWhichArrayContainsValue(898989));
我有一些 json 数据:
var data = {
"version": "2.0",
"result": {
"0": [418789, 418790, 418791],
"1": [431961, 431962, 431963],
}
};
我有我正在寻找的值 x,在这种情况下 x = 431962 为此,我编写了下面提供的搜索功能:
for (var i = 0; i < Object.keys(data.result).length; i++) {
for (var p = 0; p < Object.values(data.result)[i].length; p++) {
if (Object.values(data.result)[i][p] == 418789) {
console.log(Object.keys(data.result)[i])
}
}
}
但是我的问题是这个搜索函数由 2 个嵌套的 for 循环组成,因此在搜索大量 JSON 数据时速度非常慢,但是我似乎无法想出一个关于如何提高效率和速度的解决方案。
此搜索试图找到值 x 存在于哪个键中,其中键名称实际上是随机名称,没有特定顺序,并且 JSON 数据有几千个键,每个数组包含大约从 1 到 1,000,000 的 50 个值
您可以做的一项改进是存储对您正在使用的特定 object/array 的引用,这样您就不必 return 回到 Object.keys(... ) 一次又一次。
let data = {
"version": "2.0",
"result": {
"0": [418789, 418790, 418791],
"1": [431961, 431962, 431963],
}
};
function findWhichArrayContainsValue(val) {
for (key in data.result) {
const candidateArray = data.result[key];
if (candidateArray.includes(val)) {
return candidateArray;
}
}
return undefined;
}
console.log(findWhichArrayContainsValue(418789));
console.log(findWhichArrayContainsValue(898989));