【问题标题】:Can't overwrite javascript array无法覆盖 javascript 数组
【发布时间】:2022-02-16 20:01:41
【问题描述】:

我想跟踪“结果”的变化。如果 results.length 增加,数组将被覆盖并保存。如果长度减小,则数组将被覆盖,但新值不会保存。

playlists = [];
results = simpleMysqlQuery();
setinterval{
    update(playlists, results);
}

function update(playlists, results){
    if(playlists.length != results.length){
        playlists = reWritePlaylists(results, playlists);
    }
}

function reWritePlaylists(results, playlists){
   results.forEach(function(item, i, arr){
      playlists[i] = new Object();
      playlists[i]['id'] = results[i]['id'];
      playlists[i]['name'] = results[i]['name'];
   });
   if(playlists.length > results.length){
      playlists = playlists.slice(0, results.length);
   }
   return playlists;
}

【问题讨论】:

    标签: javascript sql node.js arrays slice


    【解决方案1】:

    当你使用slice创建一个新数组时,新创建的数组不再是对原数组的引用,所以update中的playlists参数不再引用同一个数组实例playlists 函数外的变量。试试这个:

    playlists = [];
    results = simpleMysqlQuery();
    setinterval{
        playlists = update(playlists, results);
    }
    
    function update(playlists, results){
        if(playlists.length != results.length){
            playlists = reWritePlaylists(results, playlists);
        }
        return playlists
    }
    
    function reWritePlaylists(results, playlists){
       results.forEach(function(item, i, arr){
          playlists[i] = new Object();
          playlists[i]['id'] = results[i]['id'];
          playlists[i]['name'] = results[i]['name'];
       });
       if(playlists.length > results.length){
          playlists = playlists.slice(0, results.length);
       }
       return playlists;
    }
    

    【讨论】:

    • 没有帮助。数组现在根本不会被覆盖
    【解决方案2】:

    我找到了!

    function reWritePlaylists(results, playlists){
       playlists.splice(0, playlists.length);
       results.forEach(function(item, i, arr){
          playlists[i] = new Object();
          playlists[i]['id'] = results[i]['id'];
          playlists[i]['name'] = results[i]['name'];
       });
       return playlists;
    }
    

    【讨论】:

      【解决方案3】:

      请更新 reWritePlaylists 函数如下:

      function reWritePlaylists(results, playlists){
         playlists.splice(0, results.length);
         results.forEach(function(item, i, arr){
            playlists[i] = new Object();
            playlists[i]['id'] = results[i]['id'];
            playlists[i]['name'] = results[i]['name'];
         });
         return playlists;
      }

      【讨论】:

      • 没有帮助。数组被覆盖但未保存。
      • 只修改播放列表 = []; to playlists.splice(0, results.length);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多