如何用ES6编写阵列混音器

时间:2017-06-22 08:22:38

标签: javascript arrays ecmascript-6

目前正在学习ES 6& 7,我写了一个函数混合数组,我想通过"翻译"这个功能到了6,它似乎不起作用,我没有发现我的错误,任何人都可以帮助我吗?

const arr = [1, 2, 3, 4, 5]

var mixer = array => {
    for (let i = 0; i < array.length; i++) {
        let randomized = Math.round(Math.random() * array.length)
        [array[randomized], array[i]] = [array[i], array[randomized]]
    }
    return array
}

mixer(arr)

这是我从谷歌浏览器收到的错误

  

未捕获的ReferenceError:未定义randomized       在调音台(prog.js:6)       在prog.js:11

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

问题A:randomized is not defined

您忘记了行尾的;

问题B:undefined

开始在数组末尾迭代

&#13;
&#13;
const arr = [1, 2, 3, 4, 5]

var mixer = array => {
    for (let i = array.length; i; i--) {
        let randomized = Math.floor(Math.random() * i);
        [array[i - 1], array[randomized]] = [array[randomized], array[i - 1]];
    }
    return array;//here
}

console.log(mixer(arr))
&#13;
&#13;
&#13;

答案 1 :(得分:0)

TL; DR :每当您使用([开始一行时,请务必使用以下内容结束上一条指令如果可能的话,分号。

我只想补充Weedoze的回答 你实际上只需要他建议的第一个分号 这可能令人困惑,因为分号在99%的时间内都是可选的 如果您将代码放在一行中,它可以帮助您自己了解代码的样子。特别是当您使用([开始一行时。正如Bergi在评论中所建议的那样,还要注意以/+-`开头的行。

例如,请使用以下代码:

test = 123
a = test
(b = 456)

会发出类似test is not a function之类的错误。为什么?好吧,因为

a = test
(b = 456)

等于

a = test(b = 456)

如果你想写的话

test = 123
a = test;
(b = 456)

那么即使你把第2行和第3行放在同一行上,你的代码也会清晰并且仍然具有相同的含义:

a = test;(b = 456)