我有一个json数组和一个简单的函数来返回一些数据。我可以将我想要的数据记录到控制台(该功能目前用于测试),但它没有返回。
堆叠器,请帮助我疲惫不堪的大脑让我知道我在哪里蠢蠢欲动。
(代码是超级自我解释,函数调用位于.js的底部)
function getCountryData(data, country)
{
$.each(data, function(index) {
if( data[index]["Country"] == country )
{
console.log( data[index]["Country"] );
console.log( data[index]["data"] );
return data[index]["data"];
}
});
}
答案 0 :(得分:4)
试试这个:
function getCountryData(data, country)
{
var returnData;
$.each(data, function(index) {
if( data[index]["Country"] == country )
{
returnData = data[index]["data"];
return false;
}
});
return returnData;
}
它无法正常工作的原因是因为您正在返回each
功能。因此,设置一个在迭代之外被赋值的变量将为您提供所需的数据。
答案 1 :(得分:1)
$.grep()
会更好:http://jsfiddle.net/zerkms/BDJeU/12/
function getCountryData(data, country)
{
var result = $.grep(data, function(item) {
return item["Country"] == country;
});
return result && result[0] && result[0]['data'];
}
答案 2 :(得分:1)
您的返回位于each
使用的匿名函数内。所以getCountryData
本身没有返回(因此默认返回undefined)。它必须是这样的:
function getCountryData(data, country)
{
var result;
$.each(data, function(index) {
if( data[index]["Country"] == country )
{
console.log( data[index]["Country"] );
console.log( data[index]["data"] );
result = data[index]["data"];
}
});
return result;
}
答案 3 :(得分:1)
您需要在each
之外返回,并使用return
提前中断each
次迭代:
function getCountryData(data, country)
{
var res;
$.each(data, function(index) {
if( data[index]["Country"] == country )
{
res = data[index]["data"];
// once found, stop searching and
// break early out of the each iteration
return;
}
});
return res;
}
答案 4 :(得分:1)
你真的应该使用它们吗?如果您尝试将结果过滤为单个答案,请尝试
function getCountryData(data, country) {
var matchingCountries = $.grep(data, function(row){
return row.Country == country;
});
if (matchingCountries.length > 0)
return matchingCountries[0].data;
}