【问题标题】:Populating another array from array - Javascript从数组填充另一个数组 - Javascript
【发布时间】:2010-08-09 07:18:38
【问题描述】:

我试图在 JS 中做的非常简单的事情(将一个数组的值分配给另一个数组),但不知何故,数组bar 的值似乎根本没有受到影响。

当然,我尝试的第一件事就是 bar = ar; -- 没有用,所以我尝试手动循环...仍然不起作用。

我不了解 Javascript 的怪癖!请帮忙!!

var ar=["apple","banana","canaple"]; var bar; for(i=0;i

还有,这里是小提琴:http://jsfiddle.net/vGycZ/


(以上是简化,实际数组是多维的。)

【问题讨论】:

  • 您可能已经发现了使用 Firefox 的 Firebug 插件向您指出的语法错误(“arr”与“ar”)。我敢说没有它你就不能正确地进行 Javascript 开发。
  • 我不会做太多 javascript - 而且我从来没有弄清楚如何使用 Firebug :( ... 给我一些好的教程?

标签: javascript


【解决方案1】:

您的代码无法正常工作,因为您没有初始化bar

var bar = [];

您还忘记声明您的 i 变量,这可能会产生问题,例如,如果代码位于函数内部,i 最终将成为全局变量(始终使用 var :)。

但是,您可以避免循环,只需使用slice 方法创建您的第一个数组的副本:

var arr = ["apple","banana","canaple"];
var bar = arr.slice();

【讨论】:

  • 是 +1 切片 - 顺便说一句,切片对多维数组有效吗?
  • ina:看来您可以使用一些小技巧! var bar = arr.concat();
  • @ina:slice浅复制作为对象的数组元素,您能否提供一个不太简单的示例,以准确了解您想要实现的目标?跨度>
【解决方案2】:

copy-or-clone-javascript-array-object

var a = [ 'apple', 'orange', 'grape' ];
 b = a.slice(0);

【讨论】:

    【解决方案3】:

    在 ES6 中你可以使用Array.from:

    var ar = ["apple","banana","canaple"];
    var bar = Array.from(ar);
    alert(bar[1]); // alerts 'banana'
    

    【讨论】:

      【解决方案4】:

      你有两个问题:

      首先你需要将bar初始化为一个数组:

      var bar = [];
      

      那么这里的arr应该是ar

      for(i=0;i<arr.length;i++){
      

      然后你会收到提醒你的香蕉:)

      【讨论】:

      • 是的 - 正是它。太习惯了 php 的草率,忘记声明数组了!感谢您第一个回答!
      【解决方案5】:

      使用ES6+,您可以轻松做到这一点

      const original = [1, 2, 3];
      const newArray = [...original];
      

      传播语法的文档是here

      要检查,请在 dev console 上运行这个小代码

      const k = [1, 2];
      const l = k
      k === l
      > true
      const m = [...k]
      m
      > [1, 2]
      k === m
      > false
      

      【讨论】:

      • 您能否提供文档链接:this。
      【解决方案6】:

      你拼错了变量 ar 试试这个

      for(i=0;i<ar.length;i++){
          bar[i]=ar[i];
      }
      alert(ar[1]);
      

      【讨论】:

      • 是的指针 - 这不是实际的代码,只是粗暴的简化对于 jsfiddle 来说输入得太快了
      【解决方案7】:

      问题可能出在for循环语句中:

      for(i=0;i<ar.length;i++){
          bar[i]=ar[i];
      }
      alert(ar[1]);
      

      您需要修复为ar.length 而不是arr.length. 并且最好将 bar 初始化为:var bar = []

      【讨论】:

        【解决方案8】:

        在您的代码中,for 循环中的变量arr 与您的原始数组ar 不同:您的r 太多了。

        【讨论】:

          【解决方案9】:

          其实我已经试过了:

          const original = [1, 2, 3];
          const newArray = original;
          

          它有效!

          【讨论】:

            猜你喜欢
            • 2013-03-16
            • 1970-01-01
            • 1970-01-01
            • 2011-07-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多