各位大神,帮个忙吧,折磨我一晚了!

提问 未结
20 1012
明炫
明炫 2018-10-7
悬赏:20飞吻
var str="1,2,5,6,7";
var rulesId=str.split(",");

var lid=[1,2,5,6,7];
str是数据库调出来的 不管是字符串还是json,这里我用字符串然后用split转换Array

var a = $.type(rulesId);
var b = $.type(lid);
if(a == b){
alert('类型相同 Array类型');
}else{
alert('类型不同');
}
通过上述对比,确认a和b都为Array类型,但是

var c = $.inArray(1, rulesId);
if(c >= 0){
alert('有匹配');
}else{
alert('无匹配');
}
这样反回的就是“无匹配”,但是下述的执行就能返回“有匹配”

var d = $.inArray(1, lid);
if(d >= 0){
alert('有匹配');
}else{
alert('无匹配');
}
我就纳闷了,同样的类型,为什么d就能返回有匹配,而c就返回无匹配呢?求大神们给一个解决方案吧!谢谢了
回帖
  • @明炫 @伊修特利
    $.inArray内部判断是用 ===
    split分割后每个元素都是字符串,如"1,2,3"=> ["1","2","3"]而不是[1,2,3]
    你1 === "1"当然是false咯……
    1 回复
  • var str="1,2,5,6,7";//这是字符串
    var lid=[1,2,5,6,7];//这是数组。
    怎么能一样呢?
    0 回复
  • $.inArray源码是全等于(===)
    你分割后的每个数组元素都是string……
    0 回复
  • 0 回复
  • 明炫
    2018-10-7
    @伊修特利 可是我把字符串重组了额数组啊
    var rulesId=str.split(",");
    0 回复
  • 明炫
    2018-10-7
    @KazeNariRio “inArray”要用===?可是返回来的是-1或者下标啊 难道判断全等于-1?
    0 回复
  • 明炫
    2018-10-7
    @KazeNariRio
    var d = $.inArray(1, lid);
    if(d >= 0){
    alert('有匹配');
    }else{
    alert('无匹配');
    }
    这个是能匹配到的
    0 回复
  • @明炫 我试了下
    var b=[1,2]
    jQuery.type(b.split(','));
    返回值什么都没有
    0 回复
  • 明炫
    2018-10-7
    @伊修特利
    老兄 请看看我的问题 行吗?我已经重组了
    var str="1,2,5,6,7";
    var rulesId=str.split(",");
    0 回复
  • 明炫
    2018-10-7
    @伊修特利
    大哥 这是把字符串重组数组的,你拿个数组再来split,可能吗?
    0 回复
  • @明炫 也许你不信,但是我貌似找到问题所在了
    0 回复
  • 0 回复
  • 明炫
    2018-10-7
    @伊修特利 谢谢您了,可是真的有点郁闷
    0 回复
  • 明炫
    2018-10-7
    @KazeNariRio 可是我判断出来的结果是array啊,我通过后台反过来的数组也不行
    0 回复
  • 明炫
    2018-10-7
    @KazeNariRio 按array通过后台返回也不行的
    0 回复
  • 明炫
    2018-10-7
    @KazeNariRio 返回的都是1,2,3,4,5这样的,而非"1","2","3","4","5"的
    0 回复
  • @明炫 哥哥,你对一个字符串进行 “,” 分割得到的是一个字符串数组,每个元素都是字符串类型的数字,基础啊基础
    0 回复
  • @明炫 这里后台返回的rules不也是字符串么,可以PHP那边,intval()强制转换下。
    0 回复
  • 反正就是类型统一就没问题了,js里面类型要去比较严
    0 回复
  • pcode
    2018-10-9
    lodash.推荐
    0 回复