【问题标题】:Unpacking array into separate variables in JavaScript在 JavaScript 中将数组解包为单独的变量
【发布时间】:2011-03-26 05:55:44
【问题描述】:

这是一个简单的问题,我以前也做过。我只是不记得它是怎么称呼的,也不记得它到底叫什么。

在 python 中我可以这样做:

arr = ['one', 'two']
one, two = arr

如何在 JavaScript 中做到这一点?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    这是目前唯一的跨浏览器兼容解决方案 AFAIK:

    var one = arr[0],
        two = arr[1];
    

    ES6 将允许解构赋值:

    let [x, y] = ['foo', 'bar'];
    console.log(x); // 'foo'
    console.log(y); // 'bar'
    

    或者,坚持你最初的例子:

    var arr = ['one', 'two'];
    var [one, two] = arr;
    

    你也可以创建一个默认值:

    const [one = 'one', two = 'two', three = 'three'] = [1, 2];
    console.log(one); // 1
    console.log(two); // 2
    console.log(three); // 'three'
    

    【讨论】:

    【解决方案2】:

    这个问题相当老了,但我喜欢发布这个替代方案(2016 年):也可以使用 spread 运算符“...”。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

    let xAndY = [42, 1337];
    let f = function(x, y) { return x + y; };
    f(...xAndY);
    

    【讨论】:

      【解决方案3】:

      那是destructuring assignment。您可以使用以下语法在某些浏览器中执行此操作:

      [one, two] = arr;
      

      一些最新的浏览器和转译器支持它,例如 BabelTraceur。这是 ECMAScript 4 引入的一个功能,后来成为 ECMAScript Harmony,最终成为 ES 2015。

      【讨论】:

      • 看起来它是 ES6 (2015) 的一部分,而不是 ES4? ecma-international.org/ecma-262/6.0/…
      • @jab:谢谢!有时这些旧答案会被遗忘并变得过时,尽管看起来 Mathias 已经在他的答案中添加了该信息:)
      【解决方案4】:

      如果您想将数组项作为函数参数传递,您可以使用数组的 apply 函数。

      【讨论】:

      • 我不确定 JavaScript Array 是否有 .apply() 函数。我想你的意思是some_function.apply(this, my_array)。看到这个answer
      【解决方案5】:

      认真的想法的实现。

      http://jsfiddle.net/RichAyotte/6D2wP/

      (function(a, b, c, d) {
          console.log(a, b, c, d);   
      }.apply(this, ['a', 'b', 'c', 'd']));
      

      【讨论】:

      • 这个让我很开心。通过申请开箱清单,干得好先生!
      【解决方案6】:
      var one = arr[0];
      var two = arr[1];
      

      【讨论】:

      • 你真的应该使用var来防止变量污染全局范围。
      • 我只是假设它所有声明的变量:)
      • 一次性声明每个作用域的所有 var 可能比拥有两个单独的 var 声明更好。
      【解决方案7】:

      CoffeeScript 有它:http://jashkenas.github.com/coffee-script/#pattern_matching

      并且,从页面顶部引用:

      “CoffeeScript 是一种可以编译成 JavaScript 的小语言。可以把它想象成 JavaScript 中不那么招摇的小弟——相同的基因,大致相同的身高,但风格不同。除了一些额外的好东西,在CoffeeScript 与 JavaScript 中的等价物一一对应,这只是另一种说法。”

      【讨论】:

      • 这不能回答问题。我很欣赏 CoffeeScript 有一些简洁的东西,但问题是关于 Javascript。
      • 死链接 :((((
      【解决方案8】:

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

      这是一个例子。你可以这样试试。

       let a, b, rest;
      [a, b] = [10, 20];
      
      console.log(a);
      // expected output: 10
      
      console.log(b);
      // expected output: 20
      
      [a, b, ...rest] = [10, 20, 30, 40, 50];
      
      console.log(rest);
      // expected output: Array [30,40,50]
      

      【讨论】:

        【解决方案9】:

        我的示例适用于您的示例,但如果您不知道数组或数组长度。

        arr = ['one', 'two'];
        var length = arr.length;
        for (var i = 0; i < length; i++)
        {
           var val = arr[i];
           eval('var '+arr[i]+'= arr[i];');
        }
        

        知道你有 2 个变量。第一个是“一”,即“一”,第二个是“二”,即“二”。 你的问题解决了! 但是对于代码 sn-p,我创建了额外的元素来显示 var 并记录了它。

        arr = ['one', 'two'];
        var length = arr.length;
        for (var i = 0; i < length; i++)
        {
           var val = arr[i];
           eval('var '+arr[i]+'= arr[i];');
        }
        var p = document.createElement("p");
        p.innerHTML = one + " " + two;
        document.body.appendChild(p);
        console.log(one, two);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-14
          • 1970-01-01
          • 2014-04-23
          • 1970-01-01
          • 1970-01-01
          • 2018-11-19
          • 1970-01-01
          相关资源
          最近更新 更多