我正在尝试查询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"
相关联的所有元素。
EG。用户输入"Dahid"
,我希望数组位置为[2]或"Truehaven"
,将数组位置设置为[3]
答案 0 :(得分:0)
这样的东西来获取数据
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"
}
然后你可以用汇总数据做你想做的事情
答案 1 :(得分:0)
使用.filter,返回的是新数组,其中只包含该函数返回true的元素。
var summonersWithName = json.filter(function (summoner){
summoner.summonerName === NAME_THE_USER_TYPED_IN
})
答案 2 :(得分:0)
您可以创建自定义函数,例如
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
。
答案 3 :(得分:0)
// 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;
答案 4 :(得分:0)
最终我决定根据用户输入创建一个JSON查询。因此,当用户键入用户ID时,将形成一个MySql查询,该查询将构建特定于该用户ID的JSON文件。感谢您的帮助,我很感激。