javascript - 查找和删除数组元素
问题描述
想要一个要求用户插入数字的代码,在数组中查找插入的数字并打印出没有该数字的数组。
这有什么问题?
var arr=[1,2,3,4];
var dWord=prompt("What word do you want to delete ?");
arr.forEach(function(find){
if(dWord==arr[find]){
var second=arr.slice(arr[find],arr.lenght-1);
var first=arr.slice(0,arr[find]);
second.shift();
console.log(first.concat(second)); }
else{
console.log("There is no that numberi array!") ;
}
})
解决方案
这是filter
为了什么。您可以使用它基于布尔条件创建一个新数组。在这种情况下,该条件是数组中的任何给定词是否与给定的删除词匹配。
根据您对该slice
功能的使用,我不确定您是要求用户删除索引还是删除单词。
如果您要求他们输入他们不想要的单词,那么您可以很容易地做到这一点:
const arr = ['lorem', 'ipsum', 'dolor', 'si', 'amet'];
const dWord = 'ipsum' // prompt("What word do you want to delete?");
const result = arr.filter(word => word != dWord);
console.log(result);
如果您要求他们提供他们想要删除的索引,那么您可以使用该函数的可选第二个参数filter
,如下所示:
const arr = ['lorem', 'ipsum', 'dolor', 'si', 'amet'];
const dIndex = 2 // prompt("What word do you want to delete?");
const result = arr.filter((word, index) => index != dIndex);
console.log(result);
原始代码的问题在于您如何使用该forEach
功能。当你跑
['a', 'b', 'c'].forEach(function(find) {
// ...
});
您运行一个循环,其中每个迭代都有'a'
、'b'
或'c'
as find
。在您的情况下,您的循环将运行四次,使用1
, 2
, 3
, 最后4
作为 find。在您返回并使用这些数字索引原始数组之前,这不是问题。它起作用的唯一原因是您的数组中充满了数字。如果是字母,你会得到一个错误。然后,解决这些问题,该slice
功能预计会收到两个不合适的地方来进行削减。您实际上从数组中传入了数字。所以,在第一个循环中,你的is find
,1
这意味着arr[find]
2
,因此,当您进行剪辑时,实际上是在完全不相关的索引上进行剪辑……这有点像滚雪球。
推荐阅读
- javascript - 从父组件动态传递 v-date-picker 的默认日期并从子组件返回更改的日期
- batch-file - 批处理“找不到文件”
- c - 如何像访问数组一样通过指针访问结构的成员?
- python - 如何确定图片上看不到的轮廓在哪里并绘制出来?
- apache-camel - 如何在路线到达终点之前在 Camel 中确认 Google Pubsub 消息?
- rabbitmq - RabbitMQ 抛出错误:连接 ECONNREFUSED
- docker - Docker 镜像拒绝运行 dotnet test 命令
- pytorch - 在 Pytorch Lightening 训练期间切换模型
- css - 使用 CSS 构建时间线
- python - 动态获取标准库 python 包名称列表