gpt4 book ai didi

关于此语句中 splice 的 javascript 语法问题 -> copy.push(array.splice(i,1)[0])

转载 作者:行者123 更新时间:2023-12-03 01:03:14 25 4
gpt4 key购买 nike

所以这是一个语法问题,我一直在阅读 MDN 文档,但我找不到类似的例子。我从这里得到了这个特定的代码片段:https://bost.ocks.org/mike/shuffle/正如我正在阅读随机数组一样。

完整功能如下:

    function shuffle(array) {
var copy = [], n = array.length, i;

// While there remain elements to shuffle…
while (n) {

// Pick a remaining element…
i = Math.floor(Math.random() * n--);

// And move it to the new array.
copy.push(array.splice(i, 1)[0]);
}

return copy;
}

现在,我已经使用了它并对其进行了修改以满足我的需求,并且运行良好(尽管拼接是一场噩梦,因为它不断破坏我的原始数据),但这里的要点是这一行:

copy.push(array.splice(i, 1)[0]);

我讨厌不理解一些看似基本的东西,但是在这种情况下 [0] 在做什么?如果我把它拿出来,整个东西就会损坏,但我不确定它是否是拼接或推送的一部分,或者它是否是新数组或拼接数组的索引。如果有人可以帮助阐明这一点,我将非常感激!

最佳答案

让我们来分析一下

copy.push(array.splice(i, 1)[0]);

按照“执行”的顺序

array.splice(i, 1);

array.splice(n, m) 删除开始和索引 nm 个元素,并将这些删除的元素作为数组返回...所以在这种情况下你会得到一个长度为 1 的数组 - 我们称之为 x

将原始代码中的x替换为array.splice(i, 1),我们现在有了

copy.push(x[0]);

x[0] 是从 array 中删除的唯一元素 - 它被推送到 copy 数组

防止传入数组发生变异

function shuffle(array) {
var copy = [], n = array.length, i;
array = array.slice();
// rest of code
}
<小时/>

顺便说一句,你也可以这样做

copy.push(array.splice(i, 1).pop());

copy.push(array.splice(i, 1).shift());

关于关于此语句中 splice 的 javascript 语法问题 -> copy.push(array.splice(i,1)[0]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52528730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com