将字符串转换为数组 - jQuery.inArray()无法正常工作

时间:2016-09-04 06:52:11

标签: javascript jquery arrays

我有一个看起来像这样的字符串(这是我从页面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()找不到匹配的值?我错过了什么?感谢

5 个答案:

答案 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>