Javascript 返回jQuery中过滤的JSON变量
根据Javascript 返回jQuery中过滤的JSON变量,javascript,jquery,json,Javascript,Jquery,Json,根据compname值,我可以使用此函数返回iconurl值: function icons(x){ var comand = x.toLowerCase(); var icon= { "ico":[ { "iconname": "X", "iconurl": "resources/img/x.jpg" }, { "iconname": "Y", "iconurl": "resources/img/y.png" },
compname
值,我可以使用此函数返回iconurl
值:
function icons(x){
var comand = x.toLowerCase();
var icon= { "ico":[
{
"iconname": "X",
"iconurl": "resources/img/x.jpg"
}, {
"iconname": "Y",
"iconurl": "resources/img/y.png"
}, {
"iconname": "Z",
"iconurl": "resources/img/z.jpg"
}
]};
var returnedData = $.grep(icon.ico, function (element, index) {
return element.iconname.toLowerCase() == comand;
});
return returnedData[0].iconurl;
}
仅当我调用此函数时,此功能才起作用
当我尝试为我的变量调用此函数时,我得到了“uncaughttypeerror:无法读取未定义的属性'iconurl'”
功能图标(x){
var comand=x.toLowerCase();
变量图标={
“ico”:[{
“iconname”:“X”,
“iconurl”:“resources/img/x.jpg”
}, {
“iconname”:“Y”,
“iconurl”:“resources/img/y.png”
}, {
“iconname”:“Z”,
“iconurl”:“resources/img/z.jpg”
}]
};
var returnedData=$.grep(icon.ico,函数(元素,索引){
返回元素.iconname.toLowerCase()==comand;
});
返回返回的数据[0]。iconurl;
}
var compname='cp/X/';
var regExp=/[^/cp]+/;
var regcomp=regExp.exec(compname);
var icourl=icons(regcomp.toString());
console.log(icourl)
首先,它在给定情况下运行良好
其次,您将遇到以下错误:
未捕获的TypeError:无法读取未定义的属性“iconurl”
因为,您的returnedData
是空数组。如果没有匹配项,则会发生这种情况。因此returnedData[0]
是未定义的,不是对象
您应该尝试(returnedData[0]| |{}).iconurl
来避免这种情况
第三,因为您只需要第一个值,所以使用$.grep
有点错误,因为它将循环到最后查找匹配项
您应该查看数组。查找
功能图标(x){
var comand=x.toLowerCase();
变量图标={
“ico”:[{
“iconname”:“X”,
“iconurl”:“resources/img/x.jpg”
}, {
“iconname”:“Y”,
“iconurl”:“resources/img/y.png”
}, {
“iconname”:“Z”,
“iconurl”:“resources/img/z.jpg”
}]
};
返回(icon.ico.find)(函数(el){
返回el.iconname.toLowerCase()==comand;
})| |{}
}
var compname='cp/X/';
var regExp=/[^/cp]+/;
var regcomp=regExp.exec(compname);
var icourl=icons(regcomp.toString());
log(icourl)
这可能是因为数组中没有一个元素满足条件,换句话说,returnedData[0]
是未定义的。什么是cp/X/
?如果它是一个字符串,它应该在引号内。尝试return)icon.ico.find((el,i)=>el.iconname.toLowerCase()==command)| |{})。iconurl
@Titus,当我为这个函数使用alert时,我会显示结果。问题是要退货。哈桑,对不起,我已经编辑了这篇文章。拉杰什,我不懂你的密码。谢谢但是您的代码正在代码段中工作。图标总是这样还是你从其他地方获取数据?我想应该是(returnedData[0]|{})
而不是(returnedData |{})[0]
@Titus谢谢。输入错误。:-)
var compname = "cp/X/";
var regExp = /[^/cp]+/;
var regcomp = regExp.exec(compname);
var icourl = icons(regcomp.toString());