代码之家  ›  专栏  ›  技术社区  ›  Carson Myers

在javascript中将数组解包成单独的变量

  •  106
  • Carson Myers  · 技术社区  · 14 年前

    这是一个简单的问题,我以前做过。我就是不记得它叫什么名字。

    在python中,我可以这样做:

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

    我该如何在JavaScript中做到这一点?

    7 回复  |  直到 6 年前
        1
  •  133
  •   Dinoguy1000    6 年前

    这是目前唯一与跨浏览器兼容的解决方案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
  •  13
  •   Andy E    8 年前

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

    [one, two] = arr;
    

    它在一些最新的浏览器和蒸腾器中得到支持,比如 Babel Traceur . 这是ECMAScript 4引入的一个功能,后来成为ECMAScript Harmony,最终成为ES 2015。

        3
  •  9
  •   Chris K    8 年前

    这个问题相当古老,但我喜欢发布这个备选(2016)解决方案:也可以使用 传播 操作员“…”

    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);
    
        4
  •  6
  •   serious    14 年前

    如果希望将数组项作为函数参数传递,则可以使用数组的Apply函数。

        5
  •  5
  •   Richard Ayotte    8 年前

    认真思想的落实。

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

    (function(a, b, c, d) {
        console.log(a, b, c, d);   
    }.apply(this, ['a', 'b', 'c', 'd']));
    
        6
  •  2
  •   rob waminal    14 年前
    var one = arr[0];
    var two = arr[1];
    
        7
  •  2
  •   Jakob    14 年前

    咖啡描述有: http://jashkenas.github.com/coffee-script/#pattern_matching

    从页面顶部引用:

    “coffeescript是一种编译成javascript的小语言。把它想象成javascript不那么张扬的小弟弟,同样的基因,大致相同的高度,但不同的风格。除了一些额外的好处,coffeescript中的语句与它们在javascript中的等价物一一对应,这只是另一种表达方式。”