我见过很多关于在javascript中搜索嵌套数组的帖子,但是他们都没有办法判断数组中是否存在项目。
这可能听起来令人困惑,所以这里有一些例子:
我有2个数组oldArray
和newArray
结构如下:
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的比较。第一个数组是正确的,但应该只包含旧数组中存在的名称的数组是不正确的。
答案 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
}