简体   繁体   English

删除数组jquery或Javascript中包含特定单词的所有单元格

[英]remove all cells that contains specific word in array jquery or Javascript

assume that I have this array: 假设我有这个数组:

var fruits = ["Banana-101", "Orange-105", "Apple-110", "Mango-103", "Banana-102", "Banana-104"];

I need to remove all cells that contain word "Banana" so that the output array be like this: 我需要删除所有包含单词“ Banana”的单元格,以便输出数组如下所示:

var fruits = ["Orange-105", "Apple-110", "Mango-103"];

how can I do that by using Jquery? 如何使用Jquery做到这一点?

I tried this but it is not works true: 我尝试了这个,但它不是正确的:

var found = $.inArray(fruit_id, myarray) > -1; 
myarray.splice(found, 1);

I saw this question and answer ,but in mentioned topic, the answer just removes a cell that contains specific word for example "Banana-101" but my question is how can I remove all cells that have for example "Banana"! 我看到了这个问题和答案 ,但是在提到的主题中,答案只是删除了包含特定单词的单元格,例如“ Banana-101”,但我的问题是如何删除所有包含“ Banana”的单元格!

A solution with Array#filter and String#match . 使用Array#filterString#match解决方案。

 var fruits = ["Banana-101", "Orange-105", "Apple-110", "Mango-103", "Banana-102", "Banana-104"], banana = /banana/i; // regex for banana case insensitive fruits = fruits.filter(function (a) { return !a.match(banana); }); console.log(fruits); 

In your code, found will be either true or false . 在您的代码中, found将为truefalse Neither is a valid argument for the index argument of splice . spliceindex参数的有效参数均无效。

If it's important to modify the existing array, loop backward through it and remove entries that match: 如果修改现有数组很重要,请向后循环遍历并删除匹配的条目:

 var fruits = ["Banana-101", "Orange-105", "Apple-110", "Mango-103", "Banana-102", "Banana-104"]; var fruit_id = "Banana"; console.log("Before: " + fruits); var index; for (index = fruits.length - 1; index >= 0; --index) { if (fruits[index].indexOf(fruit_id) != -1) { fruits.splice(index, 1); } } console.log("After: " + fruits); 

You loop backward so that if you remove an entry, you don't have to worry about whether to update the index or not. 您可以向后循环,这样就可以删除条目,而不必担心是否更新索引。

If creating a new, replacement array is an option, use filter : 如果可以选择创建一个新的替换数组,请使用filter

 var fruits = ["Banana-101", "Orange-105", "Apple-110", "Mango-103", "Banana-102", "Banana-104"]; var fruit_id = "Banana"; console.log("Before: " + fruits); fruits = fruits.filter(function(entry) { return entry.indexOf(fruit_id) == -1; }); console.log("After: " + fruits); 

In both cases I've assumed a case-sensitive match. 在这两种情况下,我都假定区分大小写。 For a case-insensitive one, use toLowerCase on both fruit_id and each entry you're checking. 对于不区分大小写的代码,请在fruit_id和要检查的每个条目上都使用toLowerCase

In ES6 with some trikcy js, it's about 1 line of code. 在带有一些古怪的js的ES6中,大约只有1行代码。

~ is a bitwise operator that turns -1 falsy and what ever >= 0 truthy ~是按位运算符,它会变成-1虚假,而>= 0则为真

 var fruits = ["Banana-101", "Orange-105", "Apple-110", "Mango-103", "Banana-102", "Banana-104"]; var final = fruits.filter(x => ! ~x.indexOf('Banana')); document.write(final); 

Obviously, this snippet works only with ES6 complient webbrowsers ;) 显然,此代码段仅适用于符合ES6的网络浏览器;)

You can use the filter method to filter out the elements you don't want. 您可以使用filter方法过滤掉不需要的元素。

var fruits = [
    "Banana-101",
    "Orange-105",
    "Apple-110",
    "Mango-103", 
    "Banana-102",
    "Banana-104"
];

fruits = $(fruits).filter(function () {
    return this.indexOf("Banana") === -1;
});

console.log(fruits); // ["Orange-105", "Apple-110", "Mango-103"]

Keep in mind that your question is not related to jQuery, but the plain javascript. 请记住,您的问题与jQuery不相关,而与普通javascript有关。 You can take a look over javascript filter method. 您可以看一下javascript过滤器方法。 Don't look for magic method in some frameworks to do this kind of task, take some time and learn javascript. 不要在某些框架中寻找魔术方法来完成此类任务,花费一些时间并学习javascript。 Best regards, and happy learning. 此致,祝您学习愉快。

var fruits = ["Banana-101", "Orange-105", "Apple-110", "Mango-103", "Banana-102", "Banana-104"];

var word = "Banana";
fruits = fruits.filter(function(value){
    return value.indexOf(word) == -1;
})
console.log(fruits);

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

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