JavaScript模式:这是为数组分配多个值的有效方法吗?

时间:2016-10-25 10:27:59

标签: javascript

我在CodeReview上看到过这种模式: https://codereview.stackexchange.com/questions/144954/generate-a-table-with-random-numbers

最后一个函数“shuffeledArray”。

以下代码用于在一次操作中为数组分配多个值:

var demo = [];

[demo[0], demo[1], demo[2]] = [2, 4, 8];

console.log(demo);

有效。

但我问自己:

应该使用这些技术吗?还是有缺点?

2 个答案:

答案 0 :(得分:2)

这只是一个有用功能的一个不好的例子:解构分配。

一个更好的例子使得解构分配的有用性更加明显。考虑函数需要返回多个返回值的情况。通常,我们返回一个对象或一个数组。通过解构赋值,我们可以使用单个变量来消耗该返回值:

作为对象:



function minMax(a) {
  let min = a[0], max = a[0];
  a.forEach(entry => {
    if (min > entry) {
      min = entry;
    }
    if (max < entry) {
      max = entry;
    }
  });
  return {min, max};
}

let {min, max} = minMax([2, 4, 8]);
console.log(min, max);
&#13;
&#13;
&#13;

作为阵列:

&#13;
&#13;
function minMax(a) {
  let min = a[0], max = a[0];
  a.forEach(entry => {
    if (min > entry) {
      min = entry;
    }
    if (max < entry) {
      max = entry;
    }
  });
  return [min, max];
}

let [min, max] = minMax([2, 4, 8]);
console.log(min, max);
&#13;
&#13;
&#13;

使用对象进行解构特别有用,例如,在处理模块时。假设一个模块导出了大量的东西,你只需要foobar

import {foo, bar} from "./module";

关于不使用它的浏览器支持参数:那是转换的内容。我非常高兴地在浏览器项目中使用ES2015,直到IE9已经超过两年了(是的,在规范最终确定之前),这要归功于转换。

答案 1 :(得分:1)

语法为ES6并且完全有效,为了使其与现有浏览器兼容,您可能需要使用babel或tracer来编译ES6 code to ES5 code to run in browser.

var [a, b] = [1, 2];
console.log(a, b);

上述代码分别对a和b分配1和2是有效的。

var [a, ...b] = [1, 2, 3];
console.log(a, b);

在上面的代码中,我们使用传播运算符分配a = 1b = [2,3]

关于Array destructing.

的更多主题

http://www.2ality.com/2015/01/es6-destructuring.html