javascript-数组未设置回[](空白)

javascript-数组未设置回[](空白),javascript,arrays,parse-platform,cloud,Javascript,Arrays,Parse Platform,Cloud,我有这段代码,每次第一个for循环再次启动时,我希望它在使用新用户时将数组重置为空白,但我得到一个out put,其中包含一个数组中的所有值 var items = []; for (var i = 0; i < userArray.length; i++) { items.length = 0; for (var i2 = 0; i2 < test.length; i2++) { var UserFavourite

我有这段代码,每次第一个for循环再次启动时,我希望它在使用新用户时将数组重置为空白,但我得到一个out put,其中包含一个数组中的所有值

var items = [];
    for (var i = 0; i < userArray.length; i++) {

        items.length = 0;
        for (var i2 = 0; i2 < test.length; i2++) {

            var UserFavourite = Parse.Object.extend("UserFavourite");
            var queryUserFav = new Parse.Query(UserFavourite);
            queryUserFav.equalTo('item', test[i2].get('item'));
            queryUserFav.equalTo('school', test[i2].get('school'));
            queryUserFav.equalTo('user1', userArray[i])
            queryUserFav.find().then(function(res) {

                    for (var i3 = 0; i3 < res.length; i3++){
                        var item = res[i3];
                        var itemName = item.get('item');
                        items.push(itemName);
                        if (items !== []) {
                            console.log(items.toString()+" + ")
                        }
                    }

            });

        }
    }
var项目=[];
for(var i=0;i
userArray.length等于2,test.length等于20。如果你想知道的话。当它到达第一个for循环时,我希望数组被设置回空白,但它不是

提前感谢您的帮助。

您是否尝试过:

items.length = 0;
而不是:

items = [];

请将“+”连接到控制台日志中的items变量,如下所示:

  console.log(items.toString()+" + ");

仅用于调试目的,以查看阵列是否实际被清除。我相信它已经被清除了。

您的问题是您正在执行一个循环并触发异步代码

在执行第一位异步代码之前,循环将完全完成:

  • i==0
  • 重置
    项目
  • 循环测试(20项)
    • 使用异步成功处理程序将
      find()
      排队
  • i==1
  • 重置
    项目
  • 循环测试(20项)
    • 使用异步成功处理程序将
      find()
      排队
  • 。。。一段时间后,
    find()
    调用finish时
  • 使用
    数组调用每个异步块
除非您没有显示需要访问
数组的其他代码,否则只需在成功处理程序中创建它即可:

queryUserFav.find().then(function(res) {
  // create array here:
  var items = [];

  for (var i3 = 0; i3 < res.length; i3++){
    var item = res[i3];
    var itemName = item.get('item');
    items.push(itemName);
    if (items !== []) {
      console.log(items.toString()+" + ")
    }
  }
});
queryUserFav.find().then(函数(res){
//在此处创建阵列:
var项目=[];
对于(var i3=0;i3
我认为您应该使用以下设置:

items.length = 0
因为items=[]

创建一个不同的新数组


还添加了一些使异步请求等待的承诺

如果items是一个数组,则表达式
items!==[]
将始终返回true,因为您正在比较不同的对象。也许你的意思是
items.length!=0
或更简单的
如果(items.length)
@RobG可以,但这并不影响数组没有被重置为空白的原因您的答案应该是
items.length==0
而不是一个
=
@jasonscript我指的是第2行-即清除数组。@jasonscript items.length==0,也不起作用。到数组仍然是full@jasonscript:
items.length==0
本身不做任何操作。好的,我这样做并运行了它。我如何知道它是否被清除。产量为:意大利辣味苏打+I2014-09-02T03:39:55.597Z]意大利辣味苏打+I2014-09-02T03:39:55.641Z]意大利辣味苏打,加勒比海鸡肉生菜卷+I2014-09-02T03:39:57.960Z]意大利辣味苏打,加勒比海鸡肉生菜卷,水牛华夫薯条+。。您必须清除成功回调函数中数组中的项。。请在成功回拨中进行检查,查看何时应清除阵列,然后再清除。。不要在成功回调之外手动尝试清除它。。这应该可以让它工作,把所有三个项目返回到自己的阵列你能分享你把支票放在哪里?您是如何进行的?@iqueqiorio问题是,您的第二个for循环是在第一个循环的第一次运行中执行任何成功回调函数之前执行的,因此所有值都在第一个循环的第二次运行中累积到一个数组中。。要解决此问题,您必须在SuccessofFail回调中处理对global items变量的任何更新。。因为我不知道你想在这里做什么。。我不能推荐任何其他的方法。。但目前的方式肯定行不通。。