我有:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
我想要像这样做:
array.remove("B");
但是没有remove函数。我该怎么做呢?
我有:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
我想要像这样做:
array.remove("B");
但是没有remove函数。我该怎么做呢?
let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
基本思想是通过选择与要删除的元素不同的所有元素来过滤数组。
换句话说,在上面的例子中:
“如果数组中的元素 e
不等于 B
,则将其保留在新数组中”
注意:将删除所有出现的元素。
参见:
MDN Web Docs - Array.prototype.filter()
编辑:
如果您只想删除第一次出现的元素:
t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']
倒序遍历列表,使用.splice
方法。
var array = ['A', 'B', 'C']; // Test
var search_term = 'B';
for (var i=array.length-1; i>=0; i--) {
if (array[i] === search_term) {
array.splice(i, 1);
// break; //<-- Uncomment if only the first term has to be removed
}
}
当需要删除所有搜索词出现的情况时,反向顺序非常重要。否则计数器会增加,您将跳过元素。
当只需要删除第一个匹配项时,以下内容也可以使用:
var index = array.indexOf(search_term); // <-- Not supported in <IE9
if (index !== -1) {
array.splice(index, 1);
}
0
不会像在 C 语言中那样自动更快。当然,只要你缓存了限制,这并不会使事情变得复杂,如果你在第一次匹配后继续进行(但如果你停止在它上面,就不会有问题)。 - T.J. Crowder一句话列表
让我们来解决这个数组的问题:
var array = ['A', 'B', 'C'];
1. 仅删除第一个: 如果您确信该项存在,请使用
array.splice(array.indexOf('B'), 1);
2. 仅移除最后一个: 如果确定该项存在,则使用
array.splice(array.lastIndexOf('B'), 1);
3. 删除所有出现的内容:
array = array.filter(v => v !== 'B');
splice()
返回一个包含 被删除 元素的数组(参见 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice#return_value)。 - M Imam Pratama你需要使用 .indexOf()
来找到你要查找的位置,然后使用 .splice()
将其删除。
function remove(arr, what) {
var found = arr.indexOf(what);
while (found !== -1) {
arr.splice(found, 1);
found = arr.indexOf(what);
}
}
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
remove(array, 'B');
alert(array);
这将处理所有出现的情况。
Uncaught ReferenceError: array is not defined
。出了什么问题? - Pathros.indexOf()
。如果在while-loop
中将found
作为第二个参数传递给.indexOf()
调用,那么已经检查过并且最终不相等的数组元素将不会再次被检查:found = arr.indexOf(what, found);
- pimmhogeling简单来说
array.splice(array.indexOf(item), 1);
const changedArray = array.filter( function(value) {
return value !== 'B'
});
或者您可以使用:
const changedArray = array.filter( (value) => value === 'B');
简单的解决方案(ES6)
如果您没有重复元素
Array.prototype.remove = function(elem) {
var indexElement = this.findIndex(el => el === elem);
if (indexElement != -1)
this.splice(indexElement, 1);
return this;
};
如果要从字符串数组中删除另一个字符串数组:
const names = ['1','2','3','4']
const excludeNames = ['2','3']
const filteredNames = names.filter((name) => !excludeNames.includes(name));
// ['1','4']
使用:
array.splice(2, 1);
这将从数组中删除一个项目,从索引2(第3个项目)开始
array.splice(2,1)
,它会从数组中删除索引为 2 的 1 个项目。
请查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice获取更多详细信息。 - imdzeeshan你需要自己编写remove函数。可以遍历数组,获取要删除的项的索引,并使用splice
函数将其删除。
另一种方法是创建一个新数组,遍历当前数组,如果当前对象与要删除的对象不匹配,则将其放入新数组中。
.indexOf()
和.splice()
的组合应该能解决问题。或者可以考虑使用.filter()
。 - Marc B