检查多维数组中是否存在值并返回boolean

时间:2013-03-18 20:58:47

标签: javascript jquery

我见过很多关于在javascript中搜索嵌套数组的帖子,但是他们都没有办法判断数组中是否存在项目。

这可能听起来令人困惑,所以这里有一些例子:

我有2个数组oldArraynewArray

结构如下:

array(
      [0]=>array([name]:"name"
           [location]:"location")
      [1]=>array([name]:"name2"
           [location]:"location2")
 )

两个阵列都是这样构建的。

我需要知道旧数组中存在哪些名称而不是新数组,反之亦然。

这是我尝试过的:

 var name= oldArray[key]['name'];

   for (var key in oldArray) {
       for(var i= 0, len = newArray.length; i < len; i++){
                if(newArray[i]['name'] == name){
                          //push to array
                }
                 else{
                      //push to different array
                 }
       }
 }

这样我将有一个数组,其中包含两个数组中存在的所有名称以及一个仅包含oldArray中存在的名称的数组。

这似乎不起作用,因为它是1比1的比较。第一个数组是正确的,但应该只包含旧数组中存在的名称的数组是不正确的。

2 个答案:

答案 0 :(得分:0)

您是否为旧值初始化了数组?

你得到例外吗?

您是否使用Chrome进行了调试?

编辑:

我想如果你这样做:

对于所有旧值push如果存在并再次询问并推送,它将继续推进无限循环。

尝试添加休息

    var name= oldArray[key]['name'];

       for (var key in oldArray) {
           for(var i= 0, len = newArray.length; i < len; i++){
                    if(newArray[i]['name'] == name){
                              //push to array

                    break;
                    }
                     else{
                         if(i==newArray.length-1)
                          //push to different array


                     }
           }
     }

答案 1 :(得分:0)

使用布尔值来跟踪新数组中是否存在匹配项。然后在newArray上完成内部for循环后,检查boolean以查看是否找不到匹配项,然后推送到其他数组。

var name= oldArray[key]['name'];

for (var key in oldArray) 
{
    var foundMatch=false
    for(var i= 0, len = newArray.length; i < len; i++)
    {
        if(newArray[i]['name'] == name)
        {
            //push to array
            foundMatch=true;
                    break;
        }
    }
    if(foundMatch==false)
    //push to different array

}