假设我有这个数组:
var fruits = ["Banana-101", "Orange-105", "Apple-110", "Mango-103", "Banana-102", "Banana-104"];
我需要删除所有包含单词" Banana"所以输出数组是这样的:
var fruits = ["Orange-105", "Apple-110", "Mango-103"];
如何使用Jquery做到这一点?
我尝试了这个,但它不适用:
var found = $.inArray(fruit_id, myarray) > -1;
myarray.splice(found, 1);
我看到this question and answer,但在提到的主题中,答案只是删除了一个包含特定单词的单元格,例如" Banana-101"但我的问题是如何删除所有具有例如"香蕉"!
的细胞答案 0 :(得分:2)
包含Array#filter
和String#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);
答案 1 :(得分:2)
在您的代码中,found
将是true
或false
。对于index
的{{1}}参数,它们都不是有效参数。
如果修改现有数组很重要,请向后循环并删除匹配的条目:
splice
你向后循环,这样如果你删除一个条目,你不必担心是否更新索引。
如果要创建新的替换数组,请使用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);
:
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);
和您正在检查的每个条目上使用toLowerCase
。
答案 2 :(得分:1)
在ES6中有一些trikcy js,它大概是一行代码。
~
是一个按位运算符,可以转换-1
falsy和>= 0
truthy
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);
显然,此代码段仅适用于ES6 complient webbrowsers;)
答案 3 :(得分:0)
您可以使用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"]
答案 4 :(得分:0)
请记住,您的问题与jQuery无关,而是简单的javascript。你可以看看javascript过滤方法。不要在某些框架中寻找魔法来做这种任务,花一些时间学习javascript。最好的问候,快乐的学习。
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);