JavaScript Удаление элементов из массива. Javascript - элементов - удалить определенный элемент массива js Js удалить первые элементы массива
удалить определенный элемент массива js (20)
Есть ли способ удалить элемент из массива JavaScript?
Учитывая массив:
Var ary = ["three", "seven", "eleven"];
Я хотел бы сделать что-то вроде:
RemoveItem("seven", ary);
Я просмотрел splice() но это только удаляет номер позиции, тогда как мне нужно что-то, чтобы удалить элемент по его значению.
// отредактировал спасибо MarcoCI за советы
попробуй это:
Function wantDelete(item, arr){
for (var i=0;i надеюсь, это поможет вам Let commentsWithoutDeletedArray = commentsArray.filter((comment) => !(comment.Id === commentId)); Вот версия, в которой используется функция inArray jQuery: Var index = $.inArray(item, array);
if (index != -1) {
array.splice(index, 1);
} Вы можете добиться этого, используя функцию Lodash
_.remove . var array = ["three", "seven", "eleven"];
var evens = _.remove(array, function(e) {
return e !== "seven";
});
console.log(evens);
Const _ = require("lodash");
_.without(, 2); // -> Действительно, я не понимаю, почему это невозможно решить с помощью Arr = arr.filter(value => value !== "seven");
Или, может быть, вы хотите использовать vanilla JS Arr = arr.filter(function(value) { return value !== "seven" }); Другой вариант: If (!Array.prototype.removeArr) {
Array.prototype.removeArr = function(arr) {
if(!Array.isArray(arr)) arr=;//let"s be nice to people who put a non-array value here.. that could be me!
var that = this;
if(arr.length){
var i=0;
while(i Это indexOf () внутри цикла снова, но в предположении, что массив для удаления является малым относительно массива, который нужно очистить; каждое удаление сокращает цикл while. Это позволит вам сделать следующее: Var ary = ["three", "seven", "eleven"];
var aryWithoutSeven = ary.filter(function(value) { return value != "seven" });
console.log(aryWithoutSeven); // returns ["three", "eleven"]
Это также было отмечено в этой теме где-то еще: https://.com/a/20827100/293492 Не используйте вариант с delete - он делает отверстие в массиве, так как он не переиндексирует элементы после удаленного элемента. > Array.prototype.remove=function(v){
... delete this
... };
> var myarray=["3","24","55","2"];
undefined
> myarray.remove("55");
undefined
> myarray
[ "3", "24", "2" ] Один лайнер сделает это, Var ary = ["three", "seven", "eleven"];
// Remove item "seven" from array
var filteredAry = ary.filter(function(e) { return e !== "seven" })
//=> ["three", "eleven"]
// In ECMA6 (arrow function syntax):
var filteredAry = ary.filter(e => e !== "seven")
Это использует функцию filter в JS. Он поддерживается в IE9 и выше. filter () вызывает предоставленную функцию обратного вызова один раз для каждого элемента в массиве и создает новый массив из всех значений, для которых обратный вызов возвращает значение, которое приводит к истинному. callback вызывается только для индексов массива, которым присвоены значения; он не вызывается для индексов, которые были удалены или которые никогда не были присвоены значениям. Элементы массива, которые не проходят тест обратного вызова, просто пропускаются и не включаются в новый массив. Таким образом, в основном, это то же самое, что и все остальные for (var key in ary) { ... } решений, за исключением того, что for in поддерживается как IE6. В принципе, фильтр - это метод удобства, который выглядит намного лучше (и является цепным), в отличие от конструктора for in (AFAIK). Проверьте это: For(var i in array){
if(array[i]=="seven"){
array.splice(i,1);
break;
}
}
и в функции: Function removeItem(array, item){
for(var i in array){
if(array[i]==item){
array.splice(i,1);
break;
}
}
}
removeItem(array, "seven"); Удаление всех совпадающих элементов из массива (а не только первый, как кажется, самый общий ответ здесь): While ($.inArray(item, array) > -1) {
array.splice($.inArray(item, array), 1);
}
Я использовал jQuery для тяжелой работы, но вы поняли, хотите ли вы поехать на родной язык. Хитрость заключается в том, чтобы пройти через массив от начала до начала, поэтому вы не испортите индексы при удалении элементов. Var deleteMe = function(arr, me){
var i = arr.length;
while(i--) if(arr[i] === me) arr.splice(i,1);
}
var arr = ["orange","red","black", "orange", "white" , "orange" ];
deleteMe(arr , "orange");
arr теперь ["красный", "черный", "белый"] Function cleanArrayOfSpecificTerms(array,unwantedTermsArray) {
$.each(unwantedTermsArray, function(index, value) {
var index = array.indexOf(value);
if (index > -1) {
array.splice(index, 1);
}
});
return array;
}
Чтобы использовать, выполните следующие действия: Var notInclude = ["Not","No","First","Last","Prior","Next", "dogs","cats"];
var splitTerms = ["call", "log", "dogs", "cats", "topic", "change", "pricing"];
cleanArrayOfSpecificTerms(splitTerms,notInclude) Я попытался использовать метод функции из jbaron выше, но обнаружил, что мне нужно сохранить исходный массив без изменений для использования позже и создать новый массив следующим образом: Var newArray = referenceArray;
Function newArrRemoveItem(array, item, newArray){
for(var i = 0; i < array.length; i++) {
if(array[i]!=item){
newArray.push(array[i]);
}
}
}
Затем я использую его так: Var vesselID = record.get("VesselID");
var otherVessels = new Array();
newArrRemoveItem(vesselArr,vesselID,otherVessels);
Теперь судноArr остается неповрежденным, и каждый раз, когда я выполняю приведенный выше код, массив otherVessels включает в себя все, кроме последнего элемента CAID. indexOf - это вариант, но его реализация в основном ищет весь массив для значения, поэтому время выполнения растет с размером массива. (так что это в каждом браузере, я думаю, я только проверял Firefox). У меня нет IE6 для проверки, но я бы назвал это безопасной ставкой, что вы можете проверить по крайней мере миллион элементов массива в секунду таким образом практически на любой клиентской машине. Если [размер массива] * [поисковые запросы в секунду] может вырасти больше миллиона, вы должны рассмотреть другую реализацию. В основном вы можете использовать объект для создания индекса для вашего массива, например: Var index={"three":0, "seven":1, "eleven":2};
Любая нормальная среда JavaScript создаст индекс поиска для таких объектов, чтобы вы могли быстро перевести ключ в значение, независимо от того, сколько свойств имеет объект. Это всего лишь базовый метод, в зависимости от ваших потребностей вы можете объединить несколько объектов и / или массивов, чтобы сделать те же данные быстро доступными для поиска для разных свойств. Если вы укажете свои конкретные потребности, я могу предложить более конкретную структуру данных. //This function allows remove even array from array
var removeFromArr = function(arr, elem) {
var i, len = arr.length, new_arr = ,
sort_fn = function (a, b) { return a - b; };
for (i = 0; i < len; i += 1) {
if (typeof elem === "object" && typeof arr[i] === "object") {
if (arr[i].toString() === elem.toString()) {
continue;
} else {
if (arr[i].sort(sort_fn).toString() === elem.sort(sort_fn).toString()) {
continue;
}
}
}
if (arr[i] !== elem) {
new_arr.push(arr[i]);
}
}
return new_arr;
}
Пример использования
Var arr = , "abc", 1, "1", 1];
removeFromArr(arr, 1);
//["2", , "abc", "1"]
var arr = [ , 2, "a", , ];
removeFromArr(arr, );
//] Let arr = ;
console.log(arr); //result
let index = arr.indexOf(30);
if (index > -1) {
arr.splice(index, 1);
}
console.log(arr); //result Var index = array.indexOf("item");
if(index!=-1){
array.splice(index, 1);
} Я описал лишь часть методов для работы с массивами. Здесь мы поговорим о добавлении, удалении элементов массива. О переворачивании и сортировке массива, а так же о нарезке, замене и комбинировании массивов. Вы можете использовать свойство length для добавления новых элементов в массив: Var myArray = ["Apple", "Microsoft", "Google", "Facebook"];
myArray = "Yahoo!";
console.log(myArray); // ["Apple", "Microsoft", "Google", "Facebook", "Yahoo!"]
Это сработает, т.к. элементы массива нумеруются с нуля, а length
на единицу больше. Length
всегда эквивалентно index + 1
, поэтому очень легко добавить новый элемент в конец массива. Странно, но вы можете добавить элемент на позицию, которая намного больше, чем длина самого массива: Var myArray = ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards"];
myArray = "Lindsey Buckingham";
console.log(myArray);
// ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards", undefined × 95, "Lindsey Buckingham"]
console.log(myArray.length); // 100
Как показано в комментариях, будет добавлено 95 пустых слотов и элемент «Lindsey Buckingham» в конец массива. После этого мы получим длину 100. Еще один способ добавить новый элемент в массив — использовать метод push():
Var myArray = ["Paul McCartney", "John Lennon", "George Harrison"];
myArray.push("Ringo Starr", "George Martin");
console.log(myArray);
// ["Paul McCartney", "John Lennon", "George Harrison", "Ringo Starr", "George Martin"]
Метод push()
всегда возвращает новую длину массива (в нашем случае 5). Добавить элемент можно с помощью splice():
Var myArray = ["acorn", "beech", "mongongo", "macadamia"];
myArray.splice(2, 0, "cashew"); // adds "cashew" into index 2
console.log(myArray); // ["acorn", "beech", "cashew", "mongongo", "macadamia"]
Когда второй аргумент 0, то это означает, что ни один элемент не будет удален, а поэтому любые последующие аргументы будут добавлены в массив в позицию, указанную в первом аргументе. Удалить элемент немножко сложнее, чем его добавить. Чтобы удалить элемент из конца массива, можно использовать pop():
Var myArray = ["7-up", "Sprite", "Ginger Ale", "Lemonade"];
myArray.pop();
console.log(myArray); // ["7-up", "Sprite", "Ginger Ale"]
Метод pop()
всегда удаляет последний элемент в массиве и возвращает его. Вы так же можете использовать splice()
метод: Var myArray = ["cassava", "nutmeg", "lupin", "rhubarb"];
myArray.splice(2, 1); // удалить элемент с индексом 2
console.log(myArray); // ["cassava", "nutmeg", "rhubarb"]
В отличии от метода splice(),
который используется для добавления элементов, здесь вторым аргументом идет 1, которая говорит, что мы хотим удалить элемент с индексом 2 (или 3-ий по счету). В данном случае удалился элемент «lupin». Вы можете удалить элемент массива используя оператор delete:
Var myArray = ["Byte Bandit", "Eliza", "Jeefo", "Michelangelo"];
console.log(myArray.length); // 4
delete myArray; // удалить Eliza
console.log(myArray.length); // 4
console.log(myArray); // ["Byte Bandit", undefined × 1, "Jeefo", "Michelangelo"]
Первое важное замечание: delete()
не изменяет длину массива после удаления элемента (даже, если это был последний элемент в массиве). Второе: delete()
изменяет значение удаляемого элемента на undefined, поэтому при обращении myArray = undefined
. Хороший способ удалить элемент из массива — использовать John Resig’s Array.remove . Ниже пример использования, взятый с его страницы:
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from: from;
return this.push.apply(this, rest);
};
// Удаление 2 элемента из массива
array.remove(1);
// Удаление 2-ого элемента с конца массива
array.remove(-2);
// Удаление второго и третьего элемента
array.remove(1,2);
// Удаление последнего и предпоследнего элемента
array.remove(-2,-1);
Возможно вы захотите посмотреть решение by Viral Patel , одну из функций в Underscore.js , или jQuery’s grep() . Дополнительно, в JavaScript
есть метод shift(),
который удаляет первый элемент в массиве и возвращает его значение. Посмотрим код: Var myArray = ["Matt Kramer", "Jason Bieler", "Tom Defile", "Phil Varone"];
console.log(myArray.length); // 4
var firstItem = myArray.shift();
console.log(firstItem); // Matt Kramer
console.log(myArray.length); // 3
console.log(myArray); // ["Jason Bieler", "Tom Defile", "Phil Varone"]
С помощью метода shift()
мы удалили элемент, но сохранили его значение в нашей переменной firstItem. Длина массива изменилась с 4 на 3. Этот метод может быть полезен вместе с методом push().
Используя их вместе мы можем эффективно выстраивать очередь элементов в массиве. Мы сохраняем длину массива удаляя элемент с начала и добавляя новый в конец. Наоборот, мы можем использовать метод unshift()
для добавления элемент в начало массива: Var myArray = ["apito", "castanets", "maraca"];
console.log(myArray.length); // 3
myArray.unshift("chime bar", "tan-tan");
console.log(myArray.length); // 5
console.log(myArray); // ["chime bar", "tan-tan", "apito", "castanets", "maraca"]
Используя метод unshift()
с методом pop(),
вы можете создавать очереди в обратную сторону, добавляя элементы в начало и удаляя с конца массива. Чтобы перевернуть элементы в массиве, мы можем использовать reverse():
Var myArray = ["countdown", "final", "the"];
console.log(myArray); // ["countdown", "final", "the"]
myArray = myArray.reverse();
console.log(myArray); // ["the", "final", "countdown"]
Сортировать элементы массива в алфавитном порядке возможно с помощью метода sort():
Var myArray = ["xylophones", "zebras", "juggernauts", "avocados"];
console.log(myArray); // ["xylophones", "zebras", "juggernauts", "avocados"]
myArray = myArray.sort();
console.log(myArray); // ["avocados", "juggernauts", "xylophones", "zebras"]
Но это не будет работать с числами. Var myArray = ;
console.log(myArray); //
myArray = myArray.sort();
console.log(myArray); //
Если нужно отсортировать числа, то можно использовать следующий код: Function compareNumbers(a, b) {
return a - b;
}
var myArray = ;
console.log(myArray); //
myArray = myArray.sort(compareNumbers);
console.log(myArray); //
Как показано выше, с помощью простой функции, вставленной в sort(),
массив, содержащий числа, будет отсортирован правильно. Мы можете объединить 2 или больше массивов и получить 1 массив, который содержит элементы соединенных массивов. Для этого используем метод concat():
Var myArray = ["Jay Ferguson", "Andrew Scott"];
var myArray2 = ["Chris Murphy", "Patrick Pentland"];
var myNewArray = myArray.concat(myArray2);
console.log(myNewArray);
// ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]
Var myArray = ["Jay Ferguson", "Andrew Scott"];
var myNewArray = myArray.concat("Chris Murphy", "Patrick Pentland");
console.log(myNewArray);
// ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]
Мы можете создать новый массив, содержащий 1 или более элементов из существующего массива, используя функцию slice():
Var myArray = ["Vocals", "Bass", "Guitar", "Drums", "Apples", "Oranges"];
var myNewArray = myArray.slice(4);
console.log(myNewArray); // ["Apples", "Oranges"]
Метод slice()
принимает 1 или 2 аргумента. Если передан 1 аргумент (индекс), то новый массив создается из всех элементов старого, начиная с данного индекса. Если передано 2 аргумента, то новый массив создается из элементов, начиная с первого аргумента и до элемента с индексом, переданным во втором параметре, не включая последний. Чтобы было понятней, посмотрим код ниже: Var myArray = ["Vocals", "Bass", "Guitar", "Drums", "Apples", "Oranges"];
var myNewArray = myArray.slice(0, 4);
console.log(myNewArray); // ["Vocals", "Bass", "Guitar", "Drums"]
Мы используем splice()
для удаления элементов из массива, но мы так же можем заменить элемент в массиве на новые элементы: Var myArray = ["Rivers Cuomo", "Patrick Wilson", "Brian Bell", "Matt Sharp"];
myArray.splice(3, 1, "Scott Shriner"); // заменить 1 элемент с индексом 3
console.log(myArray);
// ["Rivers Cuomo", "Patrick Wilson", "Brian Bell", "Scott Shriner"]
Метод splice()
всегда возвращает массив, содержащий элементы, которые были удалены. В строчке 2 будет возвращен 1 элемент «Brian Bell». В данных статьях были описаны методы работы с массивами в JavaScript. Некоторые дополнительные элементы можно посмотреть на MDN , которые я не включил в данный пост. Они работают только в IE9+, поэтому могут оказаться бесполезными. Есть что добавить? Или знаете какую-нибудь интересную библиотеку, которая поможет управлять массивами? Комментируйте, пожалуйста! // отредактировал спасибо MarcoCI за советы попробуй это: Function wantDelete(item, arr){
for (var i=0;i надеюсь, это поможет вам Есть ли способ удалить элемент из массива JavaScript? Учитывая массив: Var ary = ["three", "seven", "eleven"];
Я хотел бы сделать что-то вроде: RemoveItem("seven", ary);
Я просмотрел splice() но это только удаляет номер позиции, тогда как мне нужно что-то, чтобы удалить элемент по его значению. Let commentsWithoutDeletedArray = commentsArray.filter((comment) => !(comment.Id === commentId)); Вот версия, в которой используется функция inArray jQuery: Var index = $.inArray(item, array);
if (index != -1) {
array.splice(index, 1);
} Вы можете добиться этого, используя функцию Lodash
_.remove . var array = ["three", "seven", "eleven"];
var evens = _.remove(array, function(e) {
return e !== "seven";
});
console.log(evens);
Const _ = require("lodash");
_.without(, 2); // -> Действительно, я не понимаю, почему это невозможно решить с помощью Arr = arr.filter(value => value !== "seven");
Или, может быть, вы хотите использовать vanilla JS Arr = arr.filter(function(value) { return value !== "seven" }); Другой вариант: If (!Array.prototype.removeArr) {
Array.prototype.removeArr = function(arr) {
if(!Array.isArray(arr)) arr=;//let"s be nice to people who put a non-array value here.. that could be me!
var that = this;
if(arr.length){
var i=0;
while(i Это indexOf () внутри цикла снова, но в предположении, что массив для удаления является малым относительно массива, который нужно очистить; каждое удаление сокращает цикл while. Это позволит вам сделать следующее: Var ary = ["three", "seven", "eleven"];
var aryWithoutSeven = ary.filter(function(value) { return value != "seven" });
console.log(aryWithoutSeven); // returns ["three", "eleven"]
Это также было отмечено в этой теме где-то еще: https://.com/a/20827100/293492 Не используйте вариант с delete - он делает отверстие в массиве, так как он не переиндексирует элементы после удаленного элемента. > Array.prototype.remove=function(v){
... delete this
... };
> var myarray=["3","24","55","2"];
undefined
> myarray.remove("55");
undefined
> myarray
[ "3", "24", "2" ] Один лайнер сделает это, Var ary = ["three", "seven", "eleven"];
// Remove item "seven" from array
var filteredAry = ary.filter(function(e) { return e !== "seven" })
//=> ["three", "eleven"]
// In ECMA6 (arrow function syntax):
var filteredAry = ary.filter(e => e !== "seven")
Это использует функцию filter в JS. Он поддерживается в IE9 и выше. filter () вызывает предоставленную функцию обратного вызова один раз для каждого элемента в массиве и создает новый массив из всех значений, для которых обратный вызов возвращает значение, которое приводит к истинному. callback вызывается только для индексов массива, которым присвоены значения; он не вызывается для индексов, которые были удалены или которые никогда не были присвоены значениям. Элементы массива, которые не проходят тест обратного вызова, просто пропускаются и не включаются в новый массив. Таким образом, в основном, это то же самое, что и все остальные for (var key in ary) { ... } решений, за исключением того, что for in поддерживается как IE6. В принципе, фильтр - это метод удобства, который выглядит намного лучше (и является цепным), в отличие от конструктора for in (AFAIK). Проверьте это: For(var i in array){
if(array[i]=="seven"){
array.splice(i,1);
break;
}
}
и в функции: Function removeItem(array, item){
for(var i in array){
if(array[i]==item){
array.splice(i,1);
break;
}
}
}
removeItem(array, "seven"); Удаление всех совпадающих элементов из массива (а не только первый, как кажется, самый общий ответ здесь): While ($.inArray(item, array) > -1) {
array.splice($.inArray(item, array), 1);
}
Я использовал jQuery для тяжелой работы, но вы поняли, хотите ли вы поехать на родной язык. Хитрость заключается в том, чтобы пройти через массив от начала до начала, поэтому вы не испортите индексы при удалении элементов. Var deleteMe = function(arr, me){
var i = arr.length;
while(i--) if(arr[i] === me) arr.splice(i,1);
}
var arr = ["orange","red","black", "orange", "white" , "orange" ];
deleteMe(arr , "orange");
arr теперь ["красный", "черный", "белый"] Function cleanArrayOfSpecificTerms(array,unwantedTermsArray) {
$.each(unwantedTermsArray, function(index, value) {
var index = array.indexOf(value);
if (index > -1) {
array.splice(index, 1);
}
});
return array;
}
Чтобы использовать, выполните следующие действия: Var notInclude = ["Not","No","First","Last","Prior","Next", "dogs","cats"];
var splitTerms = ["call", "log", "dogs", "cats", "topic", "change", "pricing"];
cleanArrayOfSpecificTerms(splitTerms,notInclude) Я попытался использовать метод функции из jbaron выше, но обнаружил, что мне нужно сохранить исходный массив без изменений для использования позже и создать новый массив следующим образом: Var newArray = referenceArray;
Function newArrRemoveItem(array, item, newArray){
for(var i = 0; i < array.length; i++) {
if(array[i]!=item){
newArray.push(array[i]);
}
}
}
Затем я использую его так: Var vesselID = record.get("VesselID");
var otherVessels = new Array();
newArrRemoveItem(vesselArr,vesselID,otherVessels);
Теперь судноArr остается неповрежденным, и каждый раз, когда я выполняю приведенный выше код, массив otherVessels включает в себя все, кроме последнего элемента CAID. indexOf - это вариант, но его реализация в основном ищет весь массив для значения, поэтому время выполнения растет с размером массива. (так что это в каждом браузере, я думаю, я только проверял Firefox). У меня нет IE6 для проверки, но я бы назвал это безопасной ставкой, что вы можете проверить по крайней мере миллион элементов массива в секунду таким образом практически на любой клиентской машине. Если [размер массива] * [поисковые запросы в секунду] может вырасти больше миллиона, вы должны рассмотреть другую реализацию. В основном вы можете использовать объект для создания индекса для вашего массива, например: Var index={"three":0, "seven":1, "eleven":2};
Любая нормальная среда JavaScript создаст индекс поиска для таких объектов, чтобы вы могли быстро перевести ключ в значение, независимо от того, сколько свойств имеет объект. Это всего лишь базовый метод, в зависимости от ваших потребностей вы можете объединить несколько объектов и / или массивов, чтобы сделать те же данные быстро доступными для поиска для разных свойств. Если вы укажете свои конкретные потребности, я могу предложить более конкретную структуру данных. //This function allows remove even array from array
var removeFromArr = function(arr, elem) {
var i, len = arr.length, new_arr = ,
sort_fn = function (a, b) { return a - b; };
for (i = 0; i < len; i += 1) {
if (typeof elem === "object" && typeof arr[i] === "object") {
if (arr[i].toString() === elem.toString()) {
continue;
} else {
if (arr[i].sort(sort_fn).toString() === elem.sort(sort_fn).toString()) {
continue;
}
}
}
if (arr[i] !== elem) {
new_arr.push(arr[i]);
}
}
return new_arr;
}
Пример использования
Var arr = , "abc", 1, "1", 1];
removeFromArr(arr, 1);
//["2", , "abc", "1"]
var arr = [ , 2, "a", , ];
removeFromArr(arr, );
//] Let arr = ;
console.log(arr); //result
let index = arr.indexOf(30);
if (index > -1) {
arr.splice(index, 1);
}
console.log(arr); //result Var index = array.indexOf("item");
if(index!=-1){
array.splice(index, 1);
} У меня есть массив целых чисел, и я использую метод.push() для добавления к нему элементов. Есть ли простой способ удалить определенный элемент из массива? Эквивалент чего-то типа array.remove(int); , Я должен использовать базовый
JavaScript - никакие
рамки не разрешены. RemoveByIndex(,1) //=> В этом примере кода я использую функцию array.filter (...) "
для удаления ненужных элементов из массива, эта функция не меняет исходный массив и создает новый. Если ваш браузер не поддерживает эту функцию (например, IE до версии 9 или Firefox до версии 1.5), подумайте об использовании фильтра polyfill из Mozilla
. ВАЖНО
ES2015 "() => {}" синтаксис функции стрелки не поддерживается в IE вообще, Chrome до версии 45, Firefox до версии 22, Safari до 10 версии. Чтобы использовать синтаксис ES2015 в старых браузерах, вы можете использовать BabelJS Дополнительным преимуществом этого метода является то, что вы можете удалить несколько элементов Let forDeletion =
let arr =
arr = arr.filter(item => !forDeletion.includes(item))
// !!! Read below about array.includes(...) support !!!
console.log(arr)
// [ 1, 4 ]
ВАЖНО
"array.includes (...)" не поддерживается в IE вообще, Chrome до версии 47, Firefox до версии 43, Safari до версии 9 и Edge до 14 версии, так что Вот несколько способов удалить элемент из массива с помощью JavaScript
. Все описанные методы не изменяют исходный массив
и вместо этого создают новый. Предположим, у вас есть массив, и вы хотите удалить элемент в позиции i . Один из способов - использовать slice() : const items = ["a", "b", "c", "d", "e", "f"]
const i = 3
const filteredItems = items.slice(0, i-1).concat(items.slice(i, items.length))
console.log(filteredItems) slice() создает новый массив с индексами, которые он получает. Мы просто создаем новый массив - от начала до индекса, который хотим удалить, и конкатенируем другой массив из первой позиции, следующей за той, которую мы удалили до конца массива. В этом случае один хороший вариант - использовать filter() , который предлагает более декларативный
подход: const items = ["a", "b", "c", "d", "e", "f"]
const valueToRemove = "c"
const filteredItems = items.filter(item => item !== valueToRemove)
console.log(filteredItems) Это использует функции стрелок ES6. Вы можете использовать традиционные функции для поддержки старых браузеров: const items = ["a", "b", "c", "d", "e", "f"]
const valueToRemove = "c"
const filteredItems = items.filter(function(item) {
return item !== valueToRemove
})
console.log(filteredItems) или вы можете использовать Babel и преобразовать код ES6 обратно в ES5, чтобы сделать его более удобоваримым для старых браузеров, но напишите современный JavaScript в своем коде. Что делать, если вместо одного элемента вы хотите удалить много элементов? Найдем простейшее решение. Вы можете просто создать функцию и удалить элементы последовательно: const items = ["a", "b", "c", "d", "e", "f"]
const removeItem = (items, i) =>
items.slice(0, i-1).concat(items.slice(i, items.length))
let filteredItems = removeItem(items, 3)
filteredItems = removeItem(filteredItems, 5)
//["a", "b", "c", "d"]
console.log(filteredItems) Вы можете искать включение внутри функции обратного вызова: const items = ["a", "b", "c", "d", "e", "f"]
const valuesToRemove = ["c", "d"]
const filteredItems = items.filter(item => !valuesToRemove.includes(item))
// ["a", "b", "e", "f"]
console.log(filteredItems) splice() (не путать с slice()) мутирует исходный массив и его следует избегать. Вы можете использовать ES6. Var array=["1","2","3","4","5","6"]
var index = array.filter((value)=>value!="3");
["1", "2", "4", "5", "6"] Вы можете сделать это легко с помощью метода filter : Function remove(arrOriginal, elementToRemove){
return arrOriginal.filter(function(el){return el !== elementToRemove});
}
console.log(remove(, 1));
Это удаляет все элементы из массива, а также работает быстрее, чем комбинация среза и indexOf Вы никогда не должны мутировать массив массива. Поскольку это противоречит функциональному шаблону программирования. Вы можете создать новый массив без ссылки на массив, который вы хотите изменить, используя фильтр метода es6; Var myArray = ;
Предположим, вы хотите удалить 5 из массива, вы можете просто сделать это так. MyArray = myArray.filter(value => value !== 5);
Это даст вам новый массив без значения, которое вы хотите удалить. Таким образом, результат будет ; // 5 has been removed from this array
Для дальнейшего понимания вы можете прочитать документацию MDN на Array.filter filter Если вы хотите, чтобы новый массив с удаленными позициями удален, вы всегда можете удалить определенный элемент и отфильтровать массив. Возможно, потребуется расширение объекта массива для браузеров, которые не реализуют метод фильтрации, но в долгосрочной перспективе это проще, поскольку все, что вы делаете, это следующее: Var my_array = ;
delete my_array;
console.log(my_array.filter(function(a){return typeof a !== "undefined";}));
Должны отображаться Если у вас есть сложные объекты в массиве, вы можете использовать фильтры? В ситуациях, когда $ .inArray или array.splice не так просты в использовании. Особенно, если объекты, возможно, мелкие в массиве. Например, если у вас есть объект с полем Id и вы хотите, чтобы объект был удален из массива: This.array = this.array.filter(function(element, i) {
return element.id !== idToRemove;
}); Найдите index элемента массива, который вы хотите удалить, затем удалите этот индекс с помощью splice . Метод splice () изменяет содержимое массива путем удаления существующих элементов и / или добавления новых элементов. var array = ;
console.log(array)
var index = array.indexOf(5);
if (index > -1) {
array.splice(index, 1);
}
// array =
console.log(array); Второй параметр splice - это количество элементов для удаления. Обратите внимание, что splice изменяет массив на месте и возвращает новый массив, содержащий удаленные элементы. У вас есть от 1 до 9 массивов, и вы хотите удалить 5, используя код ниже. var numberArray = ;
var newNumberArray = numberArray.filter(m => {
return m !== 5;
});
console.log("new Array, 5 removed", newNumberArray); Если вы хотите использовать несколько значений ex: - 1,7,8 var numberArray = ;
var newNumberArray = numberArray.filter(m => {
return (m !== 1) && (m !== 7) && (m !== 8);
});
console.log("new Array, 5 removed", newNumberArray); Если вы хотите удалить значение массива в массиве ex: - var numberArray = ;
var removebleArray = ;
var newNumberArray = numberArray.filter(m => {
return !removebleArray.includes(m);
});
console.log("new Array, removed", newNumberArray); включает поддерживаемый браузер - link Я знаю, что уже есть много ответов, но многие из них, похоже, усложняют проблему. Вот простой, рекурсивный способ удаления всех экземпляров ключа - вызывает self, пока индекс не будет найден. Да, он работает только в браузерах indexOf , но он прост и может быть легко заполнен. Автономная функция
Function removeAll(array, key){
var index = array.indexOf(key);
if(index === -1) return;
array.splice(index, 1);
removeAll(array,key);
}
Метод прототипа
Array.prototype.removeAll = function(key){
var index = this.indexOf(key);
if(index === -1) return;
this.splice(index, 1);
this.removeAll(key);
} Array.prototype.removeItem = function(a) {
for (i = 0; i < this.length; i++) {
if (this[i] == a) {
for (i2 = i; i2 < this.length - 1; i2++) {
this = this;
}
this.length = this.length - 1
return;
}
}
}
var recentMovies = ["Iron Man", "Batman", "Superman", "Spiderman"];
recentMovies.removeItem("Superman"); Используйте.shift для удаления первого элемента массива. Например: Var array = ;
array.shift();
массив приводит к: Например: Var array = ;
array.pop();
массив приводит к: Оба метода возвращают удаленный элемент; Используйте.splice() чтобы удалить ряд элементов из массива. .splice() принимает два параметра, начальный индекс и необязательное количество элементов для удаления. Если второй параметр не.splice() удалит все элементы из начального индекса через конец массива. Например: Var array = ;
array.splice(1, 2);
оставляет array , содержащий: Возврат array.splice() - это новый массив, содержащий удаленные элементы. В приведенном выше примере возврат будет следующим: Таким образом, опускание второго параметра эффективно разбивает массив на два массива с исходным окончанием до указанного индекса: Var array = ;
array.splice(2);
Оставляет array содержащий и возвращает . Используйте delete для удаления элемента из массива без изменения длины массива: Var array = ;
console.log(array.length); // 5
delete array;
console.log(array); //
console.log(array.length); // 5
Присвоение значения length массива изменяет длину на заданное значение. Если новое значение меньше длины массива, элементы будут удалены с конца значения. Array = ;
array.length = 2;
console.log(array); //
Добавление элементов в массив.
Удаление элементов из массива
Переворачивание и сортировка элементов массива.
Объединение массивов.
Разделение массива.
Замена элементов в массиве.
Заключение
Как удалить элемент из массива по значению?
(20)
Как удалить определенный элемент из массива в JavaScript?
(20)
ES6 и без мутации: (октябрь 2016 г.)
const removeByIndex = (list, index) =>
[
...list.slice(0, index),
...list.slice(index + 1)
];
Отредактировано 2016 октября
Удаление элемента (ECMA-262 Edition 5 code aka oldstyle JS)
var value = 3
var arr =
arr = arr.filter(function(item) {
return item !== value
})
console.log(arr)
// [ 1, 2, 4, 5 ]
Удаление элемента (код ES2015)
let value = 3
let arr =
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
Удаление нескольких элементов (код ES2016)
Удаление нескольких элементов (передовой экспериментальный JavaScript ES2018?)
// array-lib.js
export function remove(...forDeletion) {
return this.filter(item => !forDeletion.includes(item))
}
// main.js
import { remove } from "./array-lib.js"
let arr =
// :: This-Binding Syntax Proposal
// using "remove" function as "virtual method"
// without extending Array.prototype
arr = arr::remove(2, 3, 5)
console.log(arr)
// [ 1, 4 ]
Если вы знаете индекс элемента
Если вы знаете значение
Удаление нескольких элементов
По индексу
По значению
Избегайте мутирования исходного массива
сдвиг
сращивание
удалять
Array.prototype.length