【问题标题】:JavaScript: Split array into individual variablesJavaScript:将数组拆分为单个变量
【发布时间】:2011-01-12 16:40:37
【问题描述】:

考虑到这个数据结构:

var vehicles = [
  [ "2011","Honda","Accord" ],
  [ "2010","Honda","Accord" ],
  .....
];

循环遍历每个 vehicles 项目,有没有办法一次性将数组元素重新分配给各个变量,例如:

for (i = 0; i < vehicles.length; i++) {
  var(year,make,model) = vehicles[i]; // doesn't work
  .....
}

...我正在努力避免这样做:

for (i = 0; i < vehicles.length; i++) {
  var year = vehicles[i][0];
  var make = vehicles[i][1];
  var model = vehicles[i][2];
  .....
}

只是好奇,因为这种类型的东西可以在其他编程语言中使用。谢谢!

【问题讨论】:

    标签: javascript arrays variables split


    【解决方案1】:

    现在可以使用 ES6 的数组解构。

    来自 Docs:

    解构赋值语法是一种 JavaScript 表达式,它可以将数组中的值或对象中的属性解包到不同的变量中。

    考虑以下示例:

    let [a, b, c] = [10, 20, 30];
    
    console.log(a);  // output => 10
    console.log(b);  // output => 20
    console.log(c);  // output => 30

    与您的数据一样,.forEach() 方法也可用于迭代数组元素以及数组解构:

    let vehicles = [
      [ "2011","Honda","Accord" ],
      [ "2010","Honda","Accord" ]
    ];
    
    vehicles.forEach(([year, make, model], index) => {
      // ... your code here ...
      console.log(`${year}, ${make}, ${model}, ${index}`);
    });

    参考资料:

    【讨论】:

      【解决方案2】:

      不幸的是,目前 XBrowser 没有一种方法可以做到这一点。 (我知道)。

      很快就可以跨浏览器了,见链接:

      https://developer.mozilla.org/en/New_in_JavaScript_1.7

      (在 PHP 中,有一个“列表”可以完全按照您的意愿进行操作,还没有类似的 XBrowser for javascript)

      当然相对较快可能意味着什么等等。(感谢 Felix 指出我在这方面的错误)


      编辑:现在可以看到:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Array_destructuring

      【讨论】:

      • @Felix,说得好。我的意思是不支持(我知道)跨浏览器(通过现代 webkit 的现代 IE)。将编辑以使其更清晰,谢谢。
      • 谢谢。那会很好。在 Perl 中你可以直接赋值: my($first,$second,$third,...) = @array; .. 也许是关于 Perl 的少数几个简单的事情之一? :)
      【解决方案3】:

      您目前在 javascript 中最接近的可能是消除多余的 var 并使用逗号分隔符分隔语句。

      for (i = 0; i < vehicles.length; i++) {
        var year = vehicles[i][0], make = vehicles[i][1], model = vehicles[i][2];
        .....
      }
      

      或者你可以把它缩短一点:

      for (i = 0; i < vehicles.length; i++) {
        var v = vehicles[i], year = v[0], make = v[1], model = v[2];
        .....
      }
      

      【讨论】:

        【解决方案4】:

        我能想到的最接近的替代方法是使用函数并使用apply() 来调用它。传递一个数组,它将作为每个参数传递。

        function vehicle(year, make, model) {
            // do stuff
        }
        
        for (i = 0; i < vehicles.length; i++) {
            vehicle.apply (this, vehicles[i]);
        }
        

        或匿名函数:

        for (i = 0; i < vehicles.length; i++) {
            (function(year, make, model) {
                // do stuff
            }).apply(this, vehicles[i]);
        }
        

        【讨论】:

          【解决方案5】:

          在 JavaScript 中将数组解包为单独的变量

          解构赋值语法是一个 JavaScript 表达式 可以将数组中的值或对象中的属性解压缩到不同的变量中。

            let array = [2,3]; 
            [a,b] = array;// unpacking array into var a and b
            console.log(a); //output 2
            console.log(b); //output 3
            let obj = {name:"someone",weight:"500pounds"};
            let {name,weight} = obj; // unpacking obj into  var name and weight
            console.log(name);// output someone
            console.log(weight);//output 500pounds
          

          Source

          【讨论】:

            猜你喜欢
            • 2011-10-02
            • 1970-01-01
            • 1970-01-01
            • 2012-10-09
            • 2014-04-23
            • 2013-12-10
            • 1970-01-01
            • 1970-01-01
            • 2016-01-30
            相关资源
            最近更新 更多