Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回jQuery中过滤的JSON变量_Javascript_Jquery_Json - Fatal编程技术网

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());