服务器端代码
$NATIVE_TEST_TEMPLATE_IDS = array(145);
将PHP数组分配到javascript中的客户端代码 -
var nativetestTemplates = "<?php echo json_encode($NATIVE_TEST_TEMPLATE_IDS); ?>"; //PHP array into JSON.
但是现在,我在这里的JSON对象nativetestTemplates看起来并不准备进行Object实例检查。我需要检查对象nativetestTemplates中是否存在145。
以下是控制台日志的详细信息 -
nativetestTemplates.length -> 5
此外,数组的各个元素具有以下内容 -
nativetestTemplates[0] -> [
nativetestTemplates[1] -> 1
nativetestTemplates[2] -> 4
nativetestTemplates[3] -> 5
nativetestTemplates[4] -> ]
那么,我做错了什么以及检查对象中是否存在元素的最佳方法是什么。
更新
在修复了Djave指出的错误后,我仍然无法检查对象nativetestTemplates中是否存在元素。
这是我的代码 -
案例1
var testAdnetworkId = $("#adnetwork_type").val(); //reading selected dropdown value
console.log("see "+$.inArray(testAdnetworkId, nativetestTemplates)+" and "+nativetestTemplates[testAdnetworkId]);
即使testAdnetworkId具有匹配值 -
,也会返回以下内容see -1 and undefined
案例2
但是,如果我这样做 -
var testAdnetworkId = 145; //hardcoded integer val
我得到$ .inArray支票所需的输出 -
see 0 and undefined
testAnetworkId的console.dir在案例1中给出了这个 -
0“1”
1“4”
2“5”
但是在案例2中,它给出了 -
0 145
可以,有人请解释在案例1中进行对象属性检查的正确方法(读取选择下拉列表的值)
答案 0 :(得分:3)
不要用引号括起来,你说
var nativetestTemplates = "[145]";
你想要它说
var nativetestTemplates = [145];
因此,您的代码将为:
var nativetestTemplates = <?php echo json_encode($NATIVE_TEST_TEMPLATE_IDS); ?>; //PHP array into JSON.
您获得奇怪输出([
,1
,2
等)的原因是Javascript只是找到字符 0,1 ,字符串开头的2个字符,而不是数组开头的项。
修改强>
有趣的是它同样的问题,你再次混淆你的变量类型。因为您正在获得(我想象的)输入字段的val()
,所以您正在寻找字符串。
console.log(typeof($("#adnetwork_type").val())); // Logs 'string'
不要担心,你可以解决这个问题。
var testAdnetworkId = parseInt($("#adnetwork_type").val()); //reading selected dropdown value
parseInt()
是你的朋友。它会尽力用一个数字替换一个字符串或其他变量,这就是你想要的。你会在这里http://codepen.io/EightArmsHQ/pen/Kjgfh看到它有效。
有关变量类型的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals
答案 1 :(得分:0)
你需要在javascript中解析json变量,如下所示:
nativetestTemplates = JSON.parse(nativetestTemplates);
现在nativetestTemplates.length会给你正确的结果。