查询JSON文件以获取数组中的位置

Querying a JSON file to get position in array

本文关键字:位置 数组 获取 JSON 文件 查询      更新时间:2023-09-26

我正在尝试查询一个JSON文件来设置数组的位置。例如,我的JSON文件的一个片段显示在下面:

  { "result": [{
        "summonerLevel": "0",
        "summonerID": "0",
        "summonerName": "",
        "summonerIcon": "0"
    }, {
        "summonerLevel": "30",
        "summonerID": "76767383",
        "summonerName": "Solminor",
        "summonerIcon": "916"
    }, {
        "summonerLevel": "30",
        "summonerID": "25470907",
        "summonerName": "Dahid",
        "summonerIcon": "959"
    }, {
        "summonerLevel": "30",
        "summonerID": "72118343",
        "summonerName": "Truehaven",
        "summonerIcon": "956"
    }]
}

目前,我已经将数组的位置硬编码为1,返回"Solminor"级别,即"30":

dbsummonerLevel = json.result[1].summonerLevel;

我已经在我的html页面上显示了这个变量:

document.getElementById("sLevel").innerHTML = dbsummonerLevel;

我想替换[1]的数组位置,以返回与用户键入的"summonerName"相关联的所有元素。

例如。用户键入"Dahid",我希望阵列位置在[2]或"Truehaven",以将阵列位置设置为[3]

编辑:我想补充一点,我的JSON数据在一个单独的php文件中,并且一直在从mysql数据库更新,我无法将JSON文件存储在我的javascript中,我不认为。

使用.filter,返回的是仅包含该函数返回true的元素的新数组。

var summonersWithName = json.filter(function (summoner){
    summoner.summonerName === NAME_THE_USER_TYPED_IN
})

您可以创建类似的自定义函数

function findIndexBy(property, value) {
  return this.findIndex(item => item[property] === value);
}

并将其用作

findIndexBy.call(arr, 'summonerName', 'Dahid');

为了方便起见,您可以将其添加到阵列原型中。但不建议使用,因为如果该语言使用此方法名称,可能会发生冲突。

Array.prototype.findIndexBy = function findBy(property, value) {
  return this.findIndex(item => item[property] === value);
}
arr.findIndexBy('summonerName', 'Dahid');

如果想要整个对象而不是索引,请将findIndex仅替换为find

这样的东西来获取数据

function getSummonerData(name, data) {
  for (var i = 0; i < data.result.length; i++) {
    if (data.result[i].summonerName === name) {
      return data.result[i];
    }
  }
}
var data = {
  "result": [{
    "summonerLevel": "0",
    "summonerID": "0",
    "summonerName": "",
    "summonerIcon": "0"
  }, {
    "summonerLevel": "30",
    "summonerID": "76767383",
    "summonerName": "Solminor",
    "summonerIcon": "916"
  }, {
    "summonerLevel": "30",
    "summonerID": "25470907",
    "summonerName": "Dahid",
    "summonerIcon": "959"
  }, {
    "summonerLevel": "30",
    "summonerID": "72118343",
    "summonerName": "Truehaven",
    "summonerIcon": "956"
  }]
};
console.log(getSummonerData("Truehaven", data));
结果:

  {
    "summonerLevel": "30",
    "summonerID": "72118343",
    "summonerName": "Truehaven",
    "summonerIcon": "956"
  }

然后你可以用召唤师数据做你想做的事

// Assuming 'userdata' is your initial object
function getDataByName(userdata, name){
    if (typeof name !== "string") throw new Error("Wrong name!");
    var userdata = userdata.result, len = userdata.length;
    while (len--) {
        if (userdata[len]['summonerName'] === name) {
            return userdata[len];
        }
    }
    return false;
}
var user = getDataByName(userdata, 'Dahid');
console.log(user);
// output: {summonerLevel: "30", summonerID: "25470907", summonerName: "Dahid", summonerIcon: "959"}
document.getElementById("sLevel").innerHTML = user.summonerLevel;

最终我决定根据用户输入创建一个JSON查询。因此,当用户输入一个用户ID时,它将形成一个MySql查询,该查询将构建一个特定于该用户ID的JSON文件。谢谢你们的帮助,伙计们,我很感激。