首页 > 解决方案 > 查找和删除数组元素

问题描述

想要一个要求用户插入数字的代码,在数组中查找插入的数字并打印出没有该数字的数组。

这有什么问题?

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!") ;
}
})

标签: javascript

解决方案


这是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 find1这意味着arr[find]2,因此,当您进行剪辑时,实际上是在完全不相关的索引上进行剪辑……这有点像滚雪球。


推荐阅读