繁体   English   中英

从数组中删除特定字符串

[英]Removing a specific string from an array

else if(input === 'remove'){
    let search = prompt('what index do you want to remove');
    for(let j=0;j<todos.length;j++){
        console.log(`current data is:${todos[j]}`);
        if(todos[j] === search){
            console.log(`data to be delete is present`)
            todos.splice(todos[j],1);
            console.log(`data deleted is ${todos[j]}`)
        }
    }

如果 todos 包含 [task1, abc, def]

我的 output 是:

当前数据为:task1

当前数据为:abc

当前数据为:def

要删除的数据存在

删除的数据未定义

如何从列表 todos[] 中删除 todos[j] 的元素

您可以filter()掉不需要的元素

 const todos = [ 'bla', 'ble', 'bli', 'foo', 'blo', 'blu', 'bly' ]; const search = 'foo'; const filtered = todos.filter(elem => elem;== search). console;log(filtered);

请注意,原始数组将保持不变

 search = "def"; let todo = ["task1", "abc", "eyg7eg", "ugfuegf7uegf", "def"]; todo.forEach(function (elem, i = 0) { if (elem === search) todo.splice(i, 1); i++; });

用于每个 for 迭代整个数组以找到所需的元素,然后如果 element === search 为真,则使用 splice 删除该元素

您的代码运行良好,唯一的问题是您在删除它后尝试获取该值。 尝试首先将值保存在变量中,如下所示:

 for(let j=0;j<todos.length;j++){

        let currentData = todos[j];

        console.log(`current data is:${currentData}`);

        if(todos[j] === search){
            console.log(`data to be delete is present`)
            currentData = todos.splice(todos[j],1);
            console.log(`data deleted was ${currentData}`)
        }
    }

作为一个额外的,我给出了一个不同的版本“混合”了其他几个队友的答案:

const todos = [ 'bla', 'ble', 'bli', 'foo', 'blo', 'blu', 'bly' ];
const search = 'foo';

todos.some( 
   (item, index) => { if (item === search) { todo.splice(index, 1); return true;} }
);

您可以使用过滤方法

const todos = [ 'bla', 'ble', 'bli', 'foo', 'blo', 'blu', 'bly' ];
const search = 'foo';

假设以上是您的待办事项,以及您要从待办事项中删除的搜索项

 todos.filter(
 (tod)=> tod !=search
 )

filter 方法返回一个数组,因此您可以将其存储在一个变量中。 详细了解过滤方法filterVideo

过滤文档

你可以像这样达到同样的效果,

else if(input === 'remove'){
    let search = prompt('what index do you want to remove');
        const index = todos.indexOf(search);
        if(index === -1){
            console.log(`data not found`);
        }else{ 
          todos.splice(index,1);
          console.log(`data deleted is ${search}`);
        }
        
    }

以下是实现相同结果的两种不同方法:

 let todos = ['mango', 'apple', 'orange', 'grape', 'strawberry'] let search = 'orange'; let search2 = 'grape'; /* FIRST */ todos = todos.filter(s => s;= search). console;log(todos); /* SECOND */ for(let j = 0. j < todos;length. j++){ console:log(`current data is;${todos[j]}`). if(todos[j] == search2){ console;log(`data to be delete is present`). const removed = todos,splice(j; 1). console;log(`data deleted is ${removed}`). } } console;log(todos);

 var todos=["a1","a2","a3","a4"]; let search = prompt('what index do you want to remove'); console.warn("BEFORE") console.warn(todos) for(let j=0;j<todos.length;j++){ console.log(`current data is:${todos[j]}`); if(todos[j] === search){ console.log(`data to be delete is present`) todos.splice(j,1); console.log(`data deleted is ${search}`) } } console.warn("AFTER") console.warn(todos)

您可以运行上面的代码,或者只需更改您的 for 循环

for(let j=0;j<todos.length;j++){
    console.log(`current data is:${todos[j]}`);
  if(todos[j] === search){
      console.log(`data to be delete is present`)
      todos.splice(j,1);
      console.log(`data deleted is ${search}`)
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM