【问题标题】:Javascript dynamic array of stringsJavascript动态字符串数组
【发布时间】:2009-08-31 14:03:17
【问题描述】:

有没有办法在 Javascript 上创建一个动态的字符串数组? 我的意思是,在一个页面上,用户可以输入一个数字或三十个数字,然后他/她按下 OK 按钮,下一页将按照输入的顺序显示数组,一次一个元素。

感谢代码。

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    我的意思是,在一个页面上,用户可以输入一个数字或三十个数字,然后他/她按下 OK 按钮,下一页以与输入相同的顺序显示数组,一次一个元素.

    好的,所以您首先需要一些用户输入?有几种方法可以做到这一点。

    1. 首先是prompt() 函数,它显示一个弹出窗口,要求用户输入一些内容。
      • 优点:简单。缺点:丑陋,无法轻松返回编辑。
    2. 其次是使用html<input type="text">字段。
      • 优点:可以设置样式,用户可以轻松查看和编辑。缺点:需要更多编码。

    对于prompt 方法,收集你的字符串是轻而易举的事:

    var input = []; // initialise an empty array
    var temp = '';
    do {
        temp = prompt("Enter a number. Press cancel or leave empty to finish.");
        if (temp === "" || temp === null) {
            break;
        } else {
            input.push(temp);  // the array will dynamically grow
        }
    } while (1);
    

    (是的,这不是最漂亮的循环,但已经很晚了,我累了......)

    另一种方法需要更多的努力。

    1. 在页面上放置一个输入字段。
    2. 为其添加一个onfocus 处理程序。
      1. 检查在这个之后是否有另一个输入元素,如果有,检查它是否为空。
        • 如果有,不要做任何事情。
        • 否则,请创建一个新输入,将其放在此输入之后,并将相同的处理程序应用于新输入。
    3. 当用户单击“确定”时,循环浏览页面上的所有<input>s 并将它们存储到一个数组中。

    例如:

    // if you put your dynamic text fields in a container it'll be easier to get them
    var inputs = document.getElementById('inputArea').getElementsByTagName('input');
    var input = [];
    for (var i = 0, l = inputs.length; i < l; ++i) {
        if (inputs[i].value.length) {
            input.push(inputs[i].value);
        }
    }
    

    之后,无论您采用何种方式收集输入,您都可以通过多种方式将数字打印回屏幕。一个简单的方法是这样的:

    var div = document.createElement('div');
    for (var i = 0, l = input.length; i < l; ++i) {
        div.innerHTML += input[i] + "<br />";
    }
    document.body.appendChild(div);
    

    我把它放在一起,以便你可以在 jsbin 中看到它的工作原理
    提示方法:http://jsbin.com/amefu
    输入法:http://jsbin.com/iyoge

    【讨论】:

    • 谢谢。我没有使用prompt(),我认为这有点烦人,但是第二个选项看起来不错。当时我将如何显示一个元素?类似于 input[0],然后用户单击按钮并显示 input[1],依此类推...
    • 好的,我现在已经把输入放在一起了。 jsbin.com/iyoge点击第一个输入,然后你所要做的就是继续跳到下一个,直到你觉得无聊。
    • 太棒了。完成输入后,我仍在尝试仅显示一个元素。基本上,它不会理想地显示整个数组,而是显示 arrayelemt[0]、arrayelemt[1]、arrayelemt[n] 直到我没有元素。
    • 我无法一次打印一个元素...有什么建议吗?
    • 一次一个?那么什么时候应该向用户显示每个后续的?每次点击后?一段时间后?
    【解决方案2】:
    var junk=new Array();
    junk.push('This is a string.');
    

    等等。

    【讨论】:

      【解决方案3】:

      据我所知,Javascript 有动态数组。您可以即时添加、删除和修改元素。

      var myArray = [1,2,3,4,5,6,7,8,9,10];
      myArray.push(11);
      document.writeln(myArray);  // Gives 1,2,3,4,5,6,7,8,9,10,11
      
      
      var myArray = [1,2,3,4,5,6,7,8,9,10];
      var popped = myArray.pop();
      document.writeln(myArray);  // Gives 1,2,3,4,5,6,7,8,9
      

      你甚至可以添加类似的元素

      var myArray = new Array()
      myArray[0] = 10
      myArray[1] = 20
      myArray[2] = 30
      

      您甚至可以更改值

      myArray[2] = 40
      

      打印顺序

      如果你想要相同的顺序,这就足够了。 Javascript 按键值的顺序打印值。如果您在数组中以单调递增的键值插入值,那么除非您想更改顺序,否则它们将以相同的方式打印。

      页面提交

      如果您使用的是 JavaScript,您甚至不需要将值提交到不同的页面。您甚至可以通过操作 DOM 在同一页面上显示数据。

      【讨论】:

      • 好的,所以如果我想一次打印一个元素(比如最上面的)并从数组中删除它,我会使用 document.writeln(myArray[0]) 并且一旦我完成了我会调用 myArray.pop() 吗?还是 pop() 从最后一个元素开始工作?
      • 我个人绝不会建议您在同一个循环中打印和删除数组的元素。您应该首先遍历数组以打印元素。如果要清除数组,无需执行 array.pop() n 次。只需将长度属性设置为 0 即可!
      【解决方案4】:

      你可以插入数据推送,这是按顺序进行的

      var arr = Array();
      function arrAdd(value){
          arr.push(value);
      }
      

      【讨论】:

      • 好的,知道了。所以我可以使用 for 循环和 arr[counter] 获取数组的内容?
      【解决方案5】:

      这是一个例子。您在文本框中输入一个数字(或其他),然后按“添加”将其放入数组中。然后按“显示”将数组项显示为元素。

      <script type="text/javascript">
      
      var arr = [];
      
      function add() {
         var inp = document.getElementById('num');
         arr.push(inp.value);
         inp.value = '';
      }
      
      function show() {
         var html = '';
         for (var i=0; i<arr.length; i++) {
            html += '<div>' + arr[i] + '</div>';
         }
         var con = document.getElementById('container');
         con.innerHTML = html;
      }
      
      </script>
      
      <input type="text" id="num" />
      <input type="button" onclick="add();" value="add" />
      <br />
      <input type="button" onclick="show();" value="show" />
      <div id="container"></div>
      

      【讨论】:

      • 太好了,谢谢。现在,要一次显示一个数组的元素,我可以使用 while 循环吗?
      【解决方案6】:

      以下代码创建一个名为 myCars 的 Array 对象:

      var myCars=new Array();
      

      向数组添加值有两种方法(您可以添加任意数量的值来定义所需的任意数量的变量)。

      1:

      var myCars=new Array();
      myCars[0]="Saab";
      myCars[1]="Volvo";
      myCars[2]="BMW";
      

      你也可以传递一个整数参数来控制数组的大小:

      var myCars=new Array(3);
      myCars[0]="Saab";
      myCars[1]="Volvo";
      myCars[2]="BMW";
      

      2:

      var myCars=new Array("Saab","Volvo","BMW");
      

      注意:如果您在数组中指定数字或真/假值,则变量的类型将是数字或布尔而不是字符串。

      访问数组

      您可以通过引用数组的名称和索引号来引用数组中的特定元素。索引号从 0 开始。

      以下代码行:

      document.write(myCars[0]);
      

      将产生以下输出:

      Saab
      

      修改数组中的值

      要修改现有数组中的值,只需将新值添加到具有指定索引号的数组中:

      myCars[0]="Opel";
      

      现在,以下代码行:

      document.write(myCars[0]);
      

      将产生以下输出:

      Opel
      

      【讨论】:

      • 由于OP提到用户输入了一些字符串,听起来他在谈论输入
      【解决方案7】:

      现场测试请查看http://jsfiddle.net/GEBrW/

      您可以使用类似的方法来创建动态数组。

      var i = 0;
      var a = new Array();
      
      a[i++] = i;
      a[i++] = i;
      a[i++] = i;
      a[i++] = i;
      a[i++] = i;
      a[i++] = i;
      a[i++] = i;
      a[i++] = i;
      

      结果:

      a[0] = 1
      a[1] = 2
      a[2] = 3
      a[3] = 4
      a[4] = 5
      a[5] = 6
      a[6] = 7
      a[7] = 8
      

      【讨论】:

        【解决方案8】:

        只需初始化一个数组并将元素压入数组即可。 它会自动缩放数组。

        var a = [ ];
        
        a.push('Some string'); console.log(a); // ['Some string'] 
        a.push('another string'); console.log(a); // ['Some string', 'another string'] 
        a.push('Some string'); console.log(a); // ['Some string', 'another string', 'Some string']
        

        【讨论】:

          猜你喜欢
          • 2012-11-13
          • 1970-01-01
          • 2017-08-27
          • 2017-11-09
          • 2020-12-09
          • 1970-01-01
          • 2019-04-11
          相关资源
          最近更新 更多