Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组显示不正确的长度_Javascript_Arrays_Shuffle_Splice - Fatal编程技术网

Javascript 数组显示不正确的长度

Javascript 数组显示不正确的长度,javascript,arrays,shuffle,splice,Javascript,Arrays,Shuffle,Splice,var卡=[1,2,3,4,5,6,7,8,9,10]; //此处显示长度为5,但有10个值 控制台、日志卡; //如果删除此函数,数组将显示正确的长度 var randomizeCards=functiondeck{ var随机化器,随机化Deck,随机化位置; 随机发生器=甲板; randomizedDeck=[]; 对于变量i=0;i

var卡=[1,2,3,4,5,6,7,8,9,10]; //此处显示长度为5,但有10个值 控制台、日志卡; //如果删除此函数,数组将显示正确的长度 var randomizeCards=functiondeck{ var随机化器,随机化Deck,随机化位置; 随机发生器=甲板; randomizedDeck=[]; 对于变量i=0;i控制台、日志卡 输出似乎来自在线Javascript IDE:

(10) [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 (5) [10, 9, 7, 1, 5]
 (5) [ 2, 3, 4, 6, 8]
因此,它的长度并不像你的第一条评论所说的那样是5。它最终变成了五个。该函数将在循环中从原始列表中删除一个项目,并将其添加到新列表中

棘手的是,此循环运行的次数由以下因素决定:

for(var i = 0; i < deck.length; i++) {

Chrome和Firefox等浏览器提供通过Console.log打印到控制台的对象的实时视图。这意味着,如果在代码运行后打开“开发人员工具”窗格,您将看到数组在打开开发人员工具以查看控制台时的值,而不是执行Console.log行时的数组值

尝试将console.log调用更改为:

console.log(cards, JSON.stringify(cards));
以下是我在Chrome控制台中看到的内容,如果我加载页面,然后打开“开发人员工具”窗格:

> Array(5) "[1,2,3,4,5,6,7,8,9,10]"
> Array(5)
> Array(5)
以下是我在Chrome控制台中看到的内容,如果我保持“开发人员工具”窗格打开并重新加载页面:

Array(10) [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] [1,2,3,4,5,6,7,8,9,10]
Array(5) [ 4, 8, 7, 9, 3 ]
Array(5) [ 1, 2, 5, 6, 10 ]

您是否得到了相同的结果?

值得注意的一点是,您的函数在数组引用上运行,这意味着您正在修改函数中的原始数组:

功能甲板{ var随机化器,随机化Deck,随机化位置; //这里您将甲板引用指定给随机化器变量 随机发生器=甲板; randomizedDeck=[]; 这就是为什么在执行诸如randomizer.splice…之类的代码时,卡阵列会发生变化

由于结果是从函数返回随机卡片,因此应使用克隆数组而不是引用。为此,请将上面的内容替换为:

功能甲板{ var随机化器,随机化Deck,随机化位置; //让我们克隆输入数组,而不是使用引用 随机化器=deck.slice; randomizedDeck=[]; 此解决方案还可以解决console.log的问题

Array(10) [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] [1,2,3,4,5,6,7,8,9,10]
Array(5) [ 4, 8, 7, 9, 3 ]
Array(5) [ 1, 2, 5, 6, 10 ]