循环遍历数组并检查其值

时间:2014-01-07 15:05:49

标签: javascript php jquery arrays json

我所做的是我首先使用jQuery函数$.parseJSON()解析它们,所以现在我有2个数组,里面有3个对象。我想要做的是我想同时遍历两个数组,以便我可以在两个数组的循环中检查当前对象的Post_ID,如果它们相等或不相等,然后,如果我发现Post_ID已经存在或存在不匹配,那么我想做点什么。

这就是我所做的:

var posts = <? php echo $posts; ?> ;
setInterval(function () {
    $.get("admin/post/get_new_posts.php", {
        userId: <? php echo User::GetUserID($_SESSION["username"]); ?>
    }, function (data) {
        data = $.parseJSON(data);
        for (var i = 0; i < data.length; i++) {
            for (var j = 0; j < posts.length; j++) {
                if (posts[j].Post_ID != data[i].Post_ID) {
                    //do something...
                } else {

                }
            }
        }
    });
}, 10000);

posts变量有其值,我确信它是通过将它们记录到控制台中来实现的。现在这里发生的是每隔十秒发送一个get请求并检查posts变量对象的Post_ID是否满足Post_ID变量的data然后执行某些操作那里。但事实并非如此。条件总是如此。

是的,这是我的对象。第一个是posts变量,第二个是data变量。

the posts and data variables view

我知道如何循环遍历变量或数组并在循环时同时检查属性?

2 个答案:

答案 0 :(得分:1)

您正在将posts中的每个条目与data中的每个条目进行比较。其中大多数都不匹配 - posts[0]data[1]data[2]等不匹配。

听起来您想要查看每个列表的相应成员(posts[0]data[0]等。)

在这种情况下,你需要一个循环,而不是两个。

// find the longest array's length
var maxi = Math.max(posts.length, data.length, 0);

for ( var i = 0; i < maxi; ++i )
{
  if (i >= posts.length)
  {
    // an entry in data, but not posts
  }
  else if (i >= data.length)
  {
    // an entry in posts, but not data
  }
  else if (data[i].Post_ID != posts[i].Post_ID)
  {
    // mismatched IDs
  }
  else
  {
    // matched IDs
  }
}

答案 1 :(得分:0)

您正在执行两个循环,这会产生问题。因为它们具有以下含义(我将把它们翻译成纯英语): 对于数组'data'的每个项,检查数组'posts'中与'data'的当前项不相等的任何项。这就是它总是“做某事”的原因。

由于两个数组的长度相同,因此您应该执行以下循环:

for (var i = 0; i < data.length; i++) {
            if (posts[i].Post_ID != data[i].Post_ID) {
                //do something...
            } else {

            }
    }