0

我看过很多关于在 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 中存在的名称的数组。

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

4

2 回答 2

0

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

你有例外吗?

你用 Chrome 调试过吗?

编辑:

我想如果你这样做:

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

尝试添加休息

    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


                     }
           }
     }
于 2013-03-18T21:10:31.483 回答
0

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

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

}
于 2013-03-18T21:59:43.663 回答