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