有没有一种方法可以从 JavaScript 数组中移除一个元素?
给定一个数组:
var ary = ['three', 'seven', 'eleven'];
我想要做类似这样的事情:
removeItem('seven', ary);
我研究了splice()
,但那只能按位置号删除,我需要一种可以按值删除项目的方法。
有没有一种方法可以从 JavaScript 数组中移除一个元素?
给定一个数组:
var ary = ['three', 'seven', 'eleven'];
我想要做类似这样的事情:
removeItem('seven', ary);
我研究了splice()
,但那只能按位置号删除,我需要一种可以按值删除项目的方法。
var index = array.indexOf('item');
if(index!=-1){
array.splice(index, 1);
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
这将使您能够执行以下操作:var ary = ['three', 'seven', 'eleven'];
var aryWithoutSeven = ary.filter(function(value) { return value != 'seven' });
console.log(aryWithoutSeven); // returns ['three', 'eleven']
var mySet = new Set(['three', 'seven', 'eleven']);
mySet.delete('seven'); // Returns true, successfully removed
[...mySet]; // Returns ['three', 'eleven']
ES6方式。
const commentsWithoutDeletedArray = commentsArray.filter(comment => comment.Id !== commentId);
const removeArrayItem = (arr, itemToRemove) => { return arr.includes(itemToRemove)? arr.splice(arr.indexOf(itemToRemove), 1): arr }
。 - roberto tomáscomment.Id !== commentId
?现在我想删除的评论是5,在过滤器中5 !== 5
是false,那么如何删除它呢?:? - Oliver D当你需要从数组中删除多次出现的值时(例如 [1,2,2,2,4,5,6]),
function removeFrmArr(array, element) {
return array.filter(e => e !== element);
};
var exampleArray = [1,2,3,4,5];
removeFrmArr(exampleArray, 3);
// return value like this
//[1, 2, 4, 5]
您可以使用splice从数组中删除单个元素,但splice无法从数组中删除多个相似的元素。function singleArrayRemove(array, value){
var index = array.indexOf(value);
if (index > -1) array.splice(index, 1);
return array;
}
var exampleArray = [1,2,3,4,5,5];
singleArrayRemove(exampleArray, 5);
// return value like this
//[1, 2, 3, 4, 5]
removeFrmArr(exampleArray, 3);
,当前代码会抛出 ReferenceError。 - mikiqex实际上,我不明白为什么这个问题不能用
arr = arr.filter(value => value !== 'seven');
或者您想使用原生JS
arr = arr.filter(function(value) { return value !== 'seven' });
由于没有一个漂亮的,这里有一个简单且可重复使用的ES6函数。
const removeArrayItem = (arr, itemToRemove) => {
return arr.filter(item => item !== itemToRemove)
}
用法:
const items = ['orange', 'purple', 'orange', 'brown', 'red', 'orange']
removeArrayItem(items, 'orange')
while ($.inArray(item, array) > -1) {
array.splice( $.inArray(item, array), 1 );
}
我使用了jQuery来完成较重的工作,但是如果你想使用本地语言,你可以得到类似的结果。
a = new Set([1,2,3,4,5]) // a = Set(5) {1, 2, 3, 4, 5}
a.delete(3) // a = Set(5) {1, 2, 4, 5}
[...a] // [1, 2, 4, 5]
一个非常简洁的解决方案,适用于所有浏览器,且不需要任何框架,就是创建一个新的数组,并在返回时删除你想要删除的元素:
/**
* @param {Array} array the original array with all items
* @param {any} item the time you want to remove
* @returns {Array} a new Array without the item
*/
var removeItemFromArray = function(array, item){
/* assign a empty array */
var tmp = [];
/* loop over all array items */
for(var index in array){
if(array[index] !== item){
/* push to temporary array if not like item */
tmp.push(array[index]);
}
}
/* return the temporary array */
return tmp;
}
Array.filter()
翻译为 "数组过滤",它是 JavaScript 中的一个数组方法。该方法可用于创建一个新数组,其中包含原始数组中满足特定条件的所有元素。使用该方法需要提供一个回调函数,该函数接受三个参数:当前元素、元素索引和数组本身。回调函数应返回一个布尔值,指示当前元素是否应包含在新数组中。 - Eric Hodonsky