【问题标题】:Javascript: assign value on arrays dataJavascript:为数组数据赋值
【发布时间】:2017-10-12 15:32:27
【问题描述】:

这是我的代码

function gotData(data){
        result = data.val() 
        const urls_kws = Object.keys(result)
                    .filter(key => result[key].last_res > 10)

        var keywords = urls_kws;

        console.log(urls_kws)

        for(var i=0;i<keywords.length;i++) {
        keywords[i] = keywords[i].replace(/-/gi, " " )
    }

}

结果是

[ '7-skinfood-gold-caviar-collagen-cream',
  'beauty-credit']

但是当我将 console.log(urls_kws) 移到下面

function gotData(data){
        result = data.val() 
        const urls_kws = Object.keys(result)
                    .filter(key => result[key].last_res > 10)

        var keywords = urls_kws;

        for(var i=0;i<keywords.length;i++) {
        keywords[i] = keywords[i].replace(/-/gi, " " )
    }

        console.log(urls_kws)
}

结果是

[ '7 skinfood gold caviar collagen cream',
  'beauty credit']

我的问题是如何保持urls_kws 的价值,因为我需要同时使用 var urls_kws(with -) 和 keywords(without -)

【问题讨论】:

    标签: javascript angularjs arrays node.js express


    【解决方案1】:

    列表是 JavaScript 中的对象,对象的行为不同。当您这样做var keywords = urls_kws; 时,您实际上是在为内存中的对象创建另一个指针。

    要复制一个对象,你可以使用这个符号:var objClone = JSON.parse(JSON.stringify(object));

    function gotData(data){
        result = data.val() 
        const urls_kws = Object.keys(result)
                    .filter(key => result[key].last_res > 10)
    
        var keywords =  JSON.parse(JSON.stringify(urls_kws));
    
        for(var i=0;i<keywords.length;i++) {
            keywords[i] = keywords[i].replace(/-/gi, " " );
        }
    
        console.log(urls_kws);
    }
    

    【讨论】:

      【解决方案2】:

      替换

          var keywords = url_knows
      

      与:

          var keywords = [];
          for(var i = 0; i < url_knows.length; i++){
              keywords.push(url_knows[i]);
          }
      

      【讨论】:

        【解决方案3】:

        urls_kws 值没有改变。您在函数外部进行控制台日志记录。所以它显示出不同的价值。

        您可以在函数的最后一行检查控制台日志记录,它会保持不变。

        如果您想在该函数之外访问相同的 urls_kws 值,请将变量设为全局变量。

        使其成为全局变量:

        window.variableName= variableName;
        

        【讨论】:

          【解决方案4】:

          创建新数组而不是替换原始值。 例如

          [ '7-skinfood-gold-caviar-collagen-cream','beauty-credit']
              .map(original => {
                  return [ original, original.replace(/-/gi, " " )];
              });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-12-22
            • 1970-01-01
            • 2019-03-14
            • 1970-01-01
            • 1970-01-01
            • 2014-12-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多