想要一个代码,要求用户插入一个数字,在数组中查找插入的数字并打印出没有该数字的数组。
这个有什么问题吗?
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
是为了.您可以使用它根据 bool 条件创建一个新数组。在本例中,该条件是数组中的任何给定单词是否与给定的删除单词匹配。
根据您对 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'
作为 find
。在您的情况下,您的循环将运行四次,其中 1
、2
、3
和最后 4
作为寻找。这不是问题,直到您返回并使用这些数字为原始数组建立索引。它稍微起作用的唯一原因是你的数组充满了数字。如果是字母,你就会得到一个错误。然后,为了解决这个问题,slice
函数期望接收两个不定值来进行切割。您实际上传入了数组中的数字。因此,在第一个循环中,您的 find
为 1
,这意味着 arr[find]
为 2
,因此,当您进行剪切时,您实际上是在一个完全不相关的索引上进行剪切...这有点像滚雪球一样。
关于javascript - 查找并删除数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59430773/