Javascript 在带有jQuery的嵌入式数组上使用find()

Javascript 在带有jQuery的嵌入式数组上使用find(),javascript,jquery,arrays,Javascript,Jquery,Arrays,我试图在嵌入式数组中循环,直到找到一个data属性与我的输入相对应的项 下面的例子应该提醒荷兰。相反,当您在第一个数组中使用一个项时,您会得到未定义的,如果您从第二个数组中选择一个,则会得到一个对象 var国家={ “欧盟”:[ {值:'Malta',数据:'MT'}, {值:'荷兰',数据:'荷兰'}, {值:'Austria',数据:'AT'}, {值:'Italy',数据:'IT'} ], “其他”:[ {值:'波斯尼亚和赫兹',数据:'巴'}, {值:'Jersey',数据:'JE'}

我试图在嵌入式数组中循环,直到找到一个
data
属性与我的输入相对应的项

下面的例子应该提醒荷兰。相反,当您在第一个数组中使用一个项时,您会得到
未定义的
,如果您从第二个数组中选择一个,则会得到一个对象

var国家={
“欧盟”:[
{值:'Malta',数据:'MT'},
{值:'荷兰',数据:'荷兰'},
{值:'Austria',数据:'AT'},
{值:'Italy',数据:'IT'}
],
“其他”:[
{值:'波斯尼亚和赫兹',数据:'巴'},
{值:'Jersey',数据:'JE'},
{值:'白俄罗斯',数据:'由'}
]
};
函数findCountry(代码){
美元。每个(国家/地区、职能(关键、arr){
val=arr.find(功能(obj){
返回obj.data==代码;
});
});
返回val;
}
警报(findCountry('NL'))

您需要在
findCountry()
函数中返回
$的结果。在您的示例中,它没有
返回
,因此
未定义
。我也删除了
var val
,因为您没有给它赋值

function findCountry(code) {
  return $.each(countries, function(key, arr) {
    return arr.find(function(obj) {
      return obj.data == code;
    });
  });
}
为了只返回匹配国家的名称,您可以使用纯Javascript(无需jQuery),并通过使用循环对象的方法和在找到匹配时提前退出的方法来提高效率

var countries = {
  "EU": [
    {value: 'Malta', data: 'MT'},
    {value: 'Netherlands', data: 'NL'},
    {value: 'Austria', data: 'AT'},
    {value: 'Italy', data: 'IT'}
  ],
  "other": [
    {value: 'Bosnia and Herz.', data: 'BA'},
    {value: 'Jersey', data: 'JE'},
    {value: 'Belarus', data: 'BY'}
  ]
};

function findCountry(code) {
  var name = null;
  Object.keys(countries).some(function(key) {       // Go through EU, other, ...
    return countries[key].some(function(country) {  // Check the array under each key
        if (country.data === code) {                // check the code against the data value
            name = country.value;                   // set the name to the value
        }
        return name !== null;                       // a true result will exit some()
    });
  });                                               // this some() will also exit when we get a result
  return name;                                      // return the name value we found
}

console.log(findCountry('BA'));

这将输出波斯尼亚和赫尔茨。
如图所示

您需要返回
$的结果。在
findCountry()函数中的每个()
。在您的示例中,它没有
返回
,因此
未定义
。我也删除了
var val
,因为您没有给它赋值

function findCountry(code) {
  return $.each(countries, function(key, arr) {
    return arr.find(function(obj) {
      return obj.data == code;
    });
  });
}
为了只返回匹配国家的名称,您可以使用纯Javascript(无需jQuery),并通过使用循环对象的方法和在找到匹配时提前退出的方法来提高效率

var countries = {
  "EU": [
    {value: 'Malta', data: 'MT'},
    {value: 'Netherlands', data: 'NL'},
    {value: 'Austria', data: 'AT'},
    {value: 'Italy', data: 'IT'}
  ],
  "other": [
    {value: 'Bosnia and Herz.', data: 'BA'},
    {value: 'Jersey', data: 'JE'},
    {value: 'Belarus', data: 'BY'}
  ]
};

function findCountry(code) {
  var name = null;
  Object.keys(countries).some(function(key) {       // Go through EU, other, ...
    return countries[key].some(function(country) {  // Check the array under each key
        if (country.data === code) {                // check the code against the data value
            name = country.value;                   // set the name to the value
        }
        return name !== null;                       // a true result will exit some()
    });
  });                                               // this some() will also exit when we get a result
  return name;                                      // return the name value we found
}

console.log(findCountry('BA'));

这将输出波斯尼亚和赫兹。
如图所示

您刚刚忘记了find函数的一些返回语句

var国家={
“欧盟”:[
{值:'Malta',数据:'MT'},
{值:'荷兰',数据:'荷兰'},
{值:'Austria',数据:'AT'},
{值:'Italy',数据:'IT'}
],
“其他”:[
{值:'波斯尼亚和赫兹',数据:'巴'},
{值:'Jersey',数据:'JE'},
{值:'白俄罗斯',数据:'由'}
]
};
函数findCountry(代码){
var结果;
美元。每个(国家/地区、职能(关键、arr){
var countryRes=arr.find(函数(obj){
返回obj.data==代码;
});
国际单项体育联合会(countryRes){
结果=countryRes;
}
});
返回结果&&result.value;
}
警报(findCountry(“JE”))

您刚刚忘记了find函数的一些返回语句

var国家={
“欧盟”:[
{值:'Malta',数据:'MT'},
{值:'荷兰',数据:'荷兰'},
{值:'Austria',数据:'AT'},
{值:'Italy',数据:'IT'}
],
“其他”:[
{值:'波斯尼亚和赫兹',数据:'巴'},
{值:'Jersey',数据:'JE'},
{值:'白俄罗斯',数据:'由'}
]
};
函数findCountry(代码){
var结果;
美元。每个(国家/地区、职能(关键、arr){
var countryRes=arr.find(函数(obj){
返回obj.data==代码;
});
国际单项体育联合会(countryRes){
结果=countryRes;
}
});
返回结果&&result.value;
}
警报(findCountry(“JE”))

在当前答案和更多实验的帮助下找到了答案

var国家={
“欧盟”:[
{值:'Malta',数据:'MT'},
{值:'荷兰',数据:'荷兰'},
{值:'Austria',数据:'AT'},
{值:'Italy',数据:'IT'}
],
“其他”:[
{值:'波斯尼亚和赫兹',数据:'巴'},
{值:'Jersey',数据:'JE'},
{值:'白俄罗斯',数据:'由'}
]
};
函数findCountry(代码){
var-val;
美元。每个(国家/地区、职能(关键、arr){
val=arr.find(功能(obj){
返回obj.data==代码;
});
//如果找到值,请提前退出
如果(val)返回false;
});
//如果找到值,则返回该值,否则返回未定义的值
返回值?值:未定义;
}
log(findCountry('MP'))

在当前答案和更多实验的帮助下找到了答案

var国家={
“欧盟”:[
{值:'Malta',数据:'MT'},
{值:'荷兰',数据:'荷兰'},
{值:'Austria',数据:'AT'},
{值:'Italy',数据:'IT'}
],
“其他”:[
{值:'波斯尼亚和赫兹',数据:'巴'},
{值:'Jersey',数据:'JE'},
{值:'白俄罗斯',数据:'由'}
]
};
函数findCountry(代码){
var-val;
美元。每个(国家/地区、职能(关键、arr){
val=arr.find(功能(obj){
返回obj.data==代码;
});
//如果找到值,请提前退出
如果(val)返回false;
});
//如果找到值,则返回该值,否则返回未定义的值
返回值?值:未定义;
}
log(findCountry('MP'))

问题在于
findCountry()
没有返回,因此它是
未定义的
如果您正在查找国家(而不是“地区”),您应该将国家名称作为键,将地区作为子对象的某些属性来构造对象。然后只需检查
if(countries['Malta'])
而不是搜索整个对象的属性。@James我希望我可以更改结构,不幸的是我使用的插件需要这个特定的结构。问题是
findCountry()
没有返回,因此,
未定义
如果您正在查找国家(而不是“地区”),则应使用国家名称作为关键字,地区作为子对象的某些属性来构造对象。然后只需检查
if(countries['Malta'])
,而不是搜索整个对象的属性。@James我希望我可以更改结构,不幸的是,我使用的插件