У меня есть JavaScript-объект, подобный этому:
id="1";
name = "serdar";
и у меня есть массив, содержащий много объектов выше. Как удалить объект из этого массива, например:
obj[1].remove();
У меня есть JavaScript-объект, подобный этому:
id="1";
name = "serdar";
и у меня есть массив, содержащий много объектов выше. Как удалить объект из этого массива, например:
obj[1].remove();
Хорошо splice
работает:
var arr = [{id:1,name:'serdar'}];
arr.splice(0,1);
// []
НЕ используйте оператор delete
в массиве.
Но может быть, вы хотите что-то вроде этого?
var removeByAttr = function(arr, attr, value){
var i = arr.length;
while(i--){
if( arr[i]
&& arr[i].hasOwnProperty(attr)
&& (arguments.length > 2 && arr[i][attr] === value ) ){
arr.splice(i,1);
}
}
return arr;
}
Пример ниже.
var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}];
removeByAttr(arr, 'id', 1);
// [{id:2,name:'alfalfa'}, {id:3,name:'joe'}]
removeByAttr(arr, 'name', 'joe');
// [{id:2,name:'alfalfa'}]
Если у вас есть доступ к функциям ES2015, и вы ищете более функциональный подход, я бы пошел с чем-то вроде:
const people = [
{ id: 1, name: 'serdar' },
{ id: 5, name: 'alex' },
{ id: 300, name: 'brittany' }
];
const idToRemove = 5;
const filteredPeople = people.filter((item) => item.id !== idToRemove);
// [
// { id: 1, name: 'serdar' },
// { id: 300, name: 'brittany' }
// [
Остерегайтесь, filter()
не мутирует, поэтому вы получите новый массив.
Обратите внимание на примечания разработчика Mozilla Developer Network в разделе "Фильтр".
Вы можете использовать метод splice()
или delete
.
Основное отличие состоит в том, что при удалении элемента массива с помощью оператора delete
длина массива не изменяется, даже если вы удаляете последний элемент массива. С другой стороны, метод splice()
сдвигает все элементы таким образом, чтобы никакие дыры не оставались на месте удаленного элемента.
Пример использования оператора delete
:
var trees = ["redwood", "bay", "cedar", "oak", "maple"];
delete trees[3];
if (3 in trees) {
// this does not get executed
}
console.log(trees.length); // 5
console.log(trees); // ["redwood", "bay", "cedar", undefined, "maple"]
Пример использования метода splice()
:
var trees = ["redwood", "bay", "cedar", "oak", "maple"];
trees.splice(3, 1);
console.log(trees.length); // 4
console.log(trees); // ["redwood", "bay", "cedar", "maple"]
Я использую это совсем немного, поэтому создал небольшой прототип. Просто ищет элемент, затем вытаскивает его, если есть совпадение.
//Prototype to remove object from array, removes first
//matching object only
Array.prototype.remove = function (v) {
if (this.indexOf(v) != -1) {
this.splice(this.indexOf(v), 1);
return true;
}
return false;
}
Может быть вызван как:
var arr = [12, 34, 56];
arr.remove(34);
Результат будет [12, 56]
Имеет логическое значение return, если был успешный remove, false, если элемент не существует.
Если вы знаете индекс, который объект имеет в массиве, вы можете использовать splice(), как упомянули другие, то есть:
var removedObject = myArray.splice(index,1);
removedObject = null;
Если вы не знаете индекс, вам нужно найти массив для него, то есть:
for (var n = 0 ; n < myArray.length ; n++) {
if (myArray[n].name == 'serdar') {
var removedObject = myArray.splice(n,1);
removedObject = null;
break;
}
}
Марсело
//K.I.S.S. method
//(the setup/comments is/are longer than the code)
//cards is a two dimensional array object
// has an array object with 4 elements at each first dimensional index
//var cards = new Array()
//cards[cards.length] = new Array(name, colors, cost, type)
//Can be constructed with Associated arrays, modify code as needed.
//my test array has 60 'cards' in it
// 15 'cards' repeated 4 times each
// groups were not sorted prior to execution
// (I had 4 groups starting with 'U' before the first 'A')
//Should work with any dimensionality as long as first
//index controls sort order
//sort and remove duplicates
//Algorithm:
// While same name side by side, remove higher entry;
// assumes 'cards' with same name have same other data
// (otherwise use cards[i-1] === cards[i] to compare array objects).
//Tested on IE9 and FireFox (multiple version #s from 31 up).
//Also tested by importing array data from 5MB text file.
//Quick execution
cards.sort()
for (i=1; i<cards.length-1; i++){
while (cards[i-1][0] == cards[i][0]){
cards.splice(i,1)
}
}
Используйте метод splice.
(По крайней мере, я предполагаю, что это ответ, вы говорите, что у вас есть объект, но код, который вы указываете, просто создает две переменные, и нет признаков того, как создается массив)
Используйте delete-keyword.
delete obj[1];
EDIT: см. Удаление элементов массива в JavaScript - удаление vs-сращивания delete будет деформировать смещение, но не полностью удалить запись. Сплайн был бы правильным, как сказал Дэвид.
delete obj[1];
Обратите внимание, что это не изменит индексы массива. Любые члены массива, которые вы удаляете, будут оставаться в виде "слотов", содержащих undefined
.
var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}];
var ind = arr.findIndex(function(element){
return element.id===2;
})
if(ind!==-1){
arr.splice(ind, 1)
}
console.log (arr)
var user = [
{ id: 1, name: 'Siddhu' },
{ id: 2, name: 'Siddhartha' },
{ id: 3, name: 'Tiwary' }
];
var recToRemove={ id: 1, name: 'Siddhu' };
user.splice(user.indexOf(recToRemove),1)
var apps = [{id: 34, имя: "Мое приложение", другое: "вещь" }, {id: 37, имя: "Мое новое приложение", другое: "вещи" }];
//получить индекс объекта с id: 37
var removeIndex = apps.map(function (item) {return item.id;}). indexOf (37);
//удалить объект
apps.splice(removeIndex, 1);
Если это последний элемент массива, вы можете сделать obj.pop()