Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 在splice()语句(JS)之前从列表中删除数组对象_Javascript_Arrays_Splice - Fatal编程技术网

Javascript 在splice()语句(JS)之前从列表中删除数组对象

Javascript 在splice()语句(JS)之前从列表中删除数组对象,javascript,arrays,splice,Javascript,Arrays,Splice,免责声明:这是学校实验室作业的一部分 更新:我想保留此代码以备将来参考,因此我将删除代码部分。感谢所有帮助过我的人!你帮了大忙 任务(总和):使用30个名人对象的数组,在HTML/JS中创建一个名人照片猜测游戏 当前状态:我正在检查用户猜测的部分。用户猜测在函数checkUserGuess()中调用。。如果匹配,则调用displayOutPut(“correct”)或(“correct”)作为下一个函数的参数,函数displayOutPut(result)。它接受result参数并在switch

免责声明:这是学校实验室作业的一部分

更新:我想保留此代码以备将来参考,因此我将删除代码部分。感谢所有帮助过我的人!你帮了大忙

任务(总和):使用30个名人对象的数组,在HTML/JS中创建一个名人照片猜测游戏

当前状态:我正在检查用户猜测的部分。用户猜测在函数checkUserGuess()中调用。。如果匹配,则调用
displayOutPut(“correct”)
(“correct”)
作为下一个函数的参数,
函数displayOutPut(result)
。它接受
result
参数并在switch语句中检查它。为了便于讨论,我关心的代码是“不正确”而不是“正确”,因为我不知道这些名人的大多数面孔。出于测试目的,我故意使其不正确

(随机挑选的名人:查理·卓别林)

观察:(根据我的截图)似乎名人阵列已经移除了Charlie,尽管控制台上显示该阵列的大小为30。这是在我将查理从阵列中拼接出来之前。
washedpcelebs
数组确实收到了Charlie。第三个阵列显示了移除查理的名人阵列,大小更改为29

截图:

什么是控制台。日志顺序:

  • 对象
  • 名人
    删除使用过的名人前的阵列
  • 当前名人的索引
  • washedpcelebs
    用于存储使用过的数据的数组
  • 名人
    删除当前名人后的数组
问题:是否有理由在
拼接之前移除Charlie?我应该关心这件事吗?我觉得这没什么大不了的,但我还是想听听大家的意见,这样我才能继续前进。该功能似乎工作正常,但似乎在某种程度上存在缺陷

注意事项: -我不想让一个同学看到这个帖子 他们偷了我的密码。我会在几个小时后删除这篇文章 出于同样的原因。 -还有一件事,我知道我的教授是这里的主持人,所以如果你看到这个,我非常乐意删除它,并亲自给你发电子邮件。我不知道你是否介意我这样做,因为我没有要求任何人真正为我做作业

代码:


为可能的复制而删除

看起来您刚刚开始使用JS

嗯,我觉得一切都很好

原因是console.log在登录控制台时使用了对阵列的引用

在拼接之前,不会从代码中删除名人

当您呼叫splice时,名人将被删除,所有包含该数组引用的console.log将显示最新值

console.log(celebrities.length) --> 30


我建议您在调试器中运行代码,以便更好地了解正在发生的事情。

TLDR:不要信任控制台

如果记录对象/数组,它将被序列化(转换为字符串),并且序列化版本将打印到控制台中:

  console.log([1, 2]); // [1, 2]
现在,对于较长的数组/嵌套对象,完全序列化可能会导致打印很长的字符串,这需要时间。另外,这个长字符串可能没有真正的帮助(你看不到森林中的树)。因此,控制台仅序列化阵列的一小部分,例如

 Array(30) [...]
它只提供基本信息,只提供数据类型(
Array
)长度(
30
)和省略内容(
[…]

所以实际上没有什么神奇的,在
拼接之前
数组长度是
30
,之后是
29


现在有一些有用但令人困惑的
。因为有时缩写的序列化不足以进行调试,所以需要完整版本。问题是,当您单击
>
时,控制台不再知道在您记录对象/数组时该对象/数组的外观。因此,它序列化对象/数组的当前状态。因此,在展开的零件中,您会看到拼接出的版本两次,因为在您单击
时它已经拼接出了


现在,要获取当时的序列化版本,请自行序列化:

 console.log( JSON.stringify(array) );
或克隆阵列以存储其状态:

 console.log( array.slice() );

为什么不使用索引而不是对象呢。那么你就不需要查了(这是可行的)。既然你已经有了一个函数,为什么还要使用更多的随机部分呢?另一个问题,对于索引或作为键,您不需要字符串。还有,不要相信控制台,它可能看起来像时间旅行。顺便说一句,这是丽塔奥拉,不是丽塔奥拉。。。。您在
>{..}
行中看到的是记录对象/数组时的样子,单击
看到的是数组现在的样子(Nina提到的时间旅行),这里有点夸张。@Jonaswillms我不认为这是一个复制品。我知道这不是骗局。我想说的是,这两者是相关的(它们都归结为控制台显示了对象/数组的错误状态)。是的,我现在开始明白了,正如尼娜和乔纳斯所提到的,“时间旅行”的事情。但我对Javascript有点熟悉,我不是专家,但我从来没有使用过控制台来测试我的代码。这是我开始经常使用的东西。不幸的是,由于上学期老师的一些问题,这是我的第二个学期。在C#组件基础之上
 console.log( array.slice() );