我有一个看起来像这样的字符串(这是我从页面HTML的输入中得到的值):
'[123,234,345]'
我将这个值转换为JS中的数组:
var tempProjectTasks = $('#task_id_array').val();
tempProjectTasks = tempProjectTasks.replace('[', '').replace(']','');
selectedProjectTasks = tempProjectTasks.split(',');
然后我在循环中比较这个数组
$.each(tasks, function(key, value) {
if ($.inArray(value['id'], selectedProjectTasks) != -1) {
checked = 'checked';
} else {
checked = '';
}
... more stuff here ...
});
这是为HTML构建一个列表,每行包含一个复选框。
我可以在控制台中看到这些值的比较为-1
,方法是在循环中添加以下console.log
命令。
console.log(selectedProjectTasks);
console.log(value['id']);
console.log($.inArray(value['id'], selectedProjectTasks));
在控制台中:
["123","234","345"]
123
-1
为什么inArray()
找不到匹配的值?我错过了什么?感谢
答案 0 :(得分:2)
["123","234","345"]
是一个字符串数组,其中123
是一个整数。
在数组
中搜索之前,您可以使用toString将其转换为字符串console.log($.inArray((value['id'].toString(), selectedProjectTasks));
答案 1 :(得分:2)
我相信答案在于$ .inArray()docs,其中说的是
值之间的比较是严格的。以下将返回-1(未找到),因为正在搜索字符串数组中的数字
您应该将新数组转换为数字,或将比较值转换为字符串。然后它应该工作。
答案 2 :(得分:1)
我正在将字符串元素与整数进行比较,因此inArray()
失败了。
我刚刚添加了以下一行,瞧!
var tempProjectTasks = $('#task_id_array').val();
tempProjectTasks = tempProjectTasks.replace('[', '').replace(']','');
selectedProjectTasks = tempProjectTasks.split(',');
for(var i = 0; i < selectedProjectTasks.length; i++) selectedProjectTasks[i] = +selectedProjectTasks[i];
希望这有助于其他人。感谢。
答案 3 :(得分:0)
你可以这样做
var arrStr = str.replace(']','').replace('[','').split(",")
arrStr = arrStr.map(Number);
$.inArray(123,arrStr);
您可以使用JavaSscript#indexOf在没有jQuery
功能的情况下执行此操作。
var arrStr = str.replace(']','').replace('[','').split(",")
arrStr = arrStr.map(Number);
arrStr.indexOf(value['id']);
// return -1 id no find otherwise return index of the element.
答案 4 :(得分:0)
问题是inArray()
做的比较是strict
。您可以改为使用$.grep()
。
RegularExpression特定方法。
var strArray = '[123,234,345]';
var selectedProjectTasks = (/^\[(.*)\]$/g.exec(strArray)[1]).split(",")
console.log(selectedProjectTasks[0], selectedProjectTasks[1], selectedProjectTasks[2]);
//then you can do your comparisions
var value = [], checked;
value['id'] = 123;
if (($.grep(selectedProjectTasks, function(n) { return n == value['id']; })) != '[]') {
checked = 'checked';
} else {
checked = '';
}
console.log(checked);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>