javascript中传递参数时出现问题

javascript中传递参数时出现问题,javascript,arguments,Javascript,Arguments,以下是我的功能: function findTextFromValue(source, id){ var returnValue = ''; //source = [{value:1, text:"Champagne"},{value:2, text:"Vallée de la Loire"}, {value:3, text:"Bordelais"},{value:4, text:"Sud-Ouest"},{value:5, text:"Languedoc-Roussill

以下是我的功能:

function findTextFromValue(source, id){
    var returnValue = '';
    //source = [{value:1, text:"Champagne"},{value:2, text:"Vallée de la Loire"},    {value:3, text:"Bordelais"},{value:4, text:"Sud-Ouest"},{value:5, text:"Languedoc-Roussillon"},{value:6, text:"Lorraine"},{value:7, text:"Alsace"},{value:8, text:"Jura"},{value:9, text:"Bourgogne"},{value:11, text:"Savoie"},{value:12, text:"Vallée du Rhône"},{value:13, text:"Provence"},{value:14, text:"Corse"},{value:15, text:"Coteaux du Lyonnais"},{value:16, text:"Bugey"}];
    //alert(source);
    $.each( source, function(key, value) {
        if(value.value == id){
            returnValue = value.text;
            return false;/* BREAK EACH ITERATION*/
        }
    });
    return returnValue;
}
当源代码设置在函数内部时,一切都可以完美地工作。 当源代码通过函数参数传递时,我得到一个

TypeError: invalid 'in' operand e
硬编码数组是我从警报中复制/粘贴的数组,因此它应该完全相同。我错过了什么

解决方案:

source = eval(source);
更好的解决方案

eval是邪恶的(有人告诉我…)好的答案是:

source = JSON.parse(source);
对于出现此错误的用户:

SyntaxError: JSON.parse: expected property name or '}'
这意味着您的JSON数组不包含双引号。例如:

[{"value":"1", "text":"Champagne"}, ...]

您几乎肯定是在向函数传递字符串,而不是实际数组。我之所以这样说,是因为以下代码复制了准确的错误:

var s = '[{value:1, text:"Champagne"},{value:2, text:"Vallée de la Loire"},    {value:3, text:"Bordelais"},{value:4, text:"Sud-Ouest"},{value:5, text:"Languedoc-Roussillon"},{value:6, text:"Lorraine"},{value:7, text:"Alsace"},{value:8, text:"Jura"},{value:9, text:"Bourgogne"},{value:11, text:"Savoie"},{value:12, text:"Vallée du Rhône"},{value:13, text:"Provence"},{value:14, text:"Corse"},{value:15, text:"Coteaux du Lyonnais"},{value:16, text:"Bugey"}]'

$.each(s,function(key, value) {
});

jsfiddle:(注意控制台中的错误)

您确定传递了一个数组而不是JSON字符串吗?要了解更多关于源代码的信息,请不要使用
警报
。使用
console.log(源、源的类型)并打开控制台(F12)。向我们展示一个失败的示例!源是字符串而不是数组!谢谢你的回答。请参阅下面已接受解决方案的详细信息。确实如此!这是一个字符串而不是数组!它的工作原理是:source=eval(source)@哈格斯布鲁格斯-