2016-06-23 3 views
-7

У меня есть массив объектов, которые я пытаюсь выполнить, чтобы соответствовать определенному значению, если он найден, удалите этот объект, иначе возвращайте false. Ниже приведен код:, который используется для удаления объекта из массива

array: [{ 
obj1:{ 
    id: null, 
    name:'test', 
    address: '6857346jfhbdjshb' 
}, 
    obj12:{ 
    id: 678346, 
    name:'test', 
    address: '63784hgj' 
}, 
    obj13:{ 
    id: null, 
    name:'test', 
    address: 'tevhgvd' 
}, 
    obj15:{ 
    id: 65847, 
    name:'test', 
    address: 'djhvwe677ghdgv' 
    }, 
    obj18:{ 
    address: "" 
    } 
}] 

ЯШ:

for (var obj in array){ 
     if (array[obj].address === "63784hgj" || array[obj].address === "djhvwe677ghdgv" ||array[prop].address === "") 
    { 
    array[obj].destroy(); //equivalent to array[1].destroy() (destroy, delete,remove,hide, pop none of them work) 
    } 
    } 

Я не уверен, какая функция является правильным, чтобы удалить объект из массива.

+1

Трудно поверить, что вы придумали нулевые результаты для этого в веб-поиске. – charlietfl

+1

В вашем массиве есть только один элемент, поэтому цикл его не будет очень многого. Вы хотите перебрать ключи в объекте, который является единственным элементом. После того, как вы найдете ключ, который хотите удалить, его можно удалить стандартным способом (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete). –

+0

* У меня есть массив объектов, которые я пытаюсь пропустить, чтобы соответствовать определенному значению, * Нет, вы этого не делаете. У вас есть массив, содержащий элемент ** single **, который представляет собой объект, содержащий несколько свойств. –

ответ

0

Вы, очевидно, хотите отфильтровать определенные свойства из одного элемента вашего массива, который является объектом, содержащим подобъекты, когда свойство подобъекта address соответствует одному или нескольким строковым значениям.

Извлечь первый элемент массива, а затем перебрать его свойства с помощью цикла for...in. Если подполе сопоставлено, удалите свойство с помощью delete.

function filterproc(array) { 
    var o = array[0]; 

    for (var k in o) 
    if (o[k].address === "....") 
     delete o[k]; 
} 

Для сопоставления с многообразными возможностями, рассмотреть возможность использования indexOf, которая проверяет, является ли массив содержит некоторое значение:

if (['63784hgj', ...].indexOf(o[k]) !== -1) ... 
1

Если то, что вы хотите, это то, что toranaburo описал в своей answer тогда ничего общего с моим , :((inform me to delete mine)

Если вы хотите функцию, которая возвращает новое значение этого:

var forbiddenAddressList = ['', '63784hgj', 'djhvwe677ghdgv']; 
var newArray = myArray.filter(i => forbiddenAddressList.indexof(i.address) === -1); 

другой путь:

var newArray = []; 

for (var i = 0; i < myArray.length; i++) 
    if(forbiddenAddressList.indexof(i.address) === -1) 
     newArray.push(myArray[i]); 
1

Так что если вы спрашиваете, чтобы перебрать массив объектов, и если значение свойства найдено, то удалите объект, к которому он принадлежит, тогда это то, что я придумал.

var array = [ 
     {id: null,name:'test',address: '6857346jfhbdjshb'}, 
     {id: 678346,name:'test',address: '63784hgj'}, 
     {id: null,name:'test',address: 'tevhgvd'}, 
     {id: 65847,name:'test',address: 'djhvwe677ghdgv'}, 
     {address: ""} 
    ]; 

for (var obj in array){ 
     if (array[obj].address === "63784hgj" || array[obj].address === "djhvwe677ghdgv" || array[obj].address === "") 
     { 
      array.splice(obj, 1); 
     } 
    } 

Я изменил ваш массив объектов, но все, кроме Obj1, Obj2 и т. Д., Остается тем, что массивы уже проиндексированы, поэтому массив [0] относится к Obj1. Также в вашем операторе if у вас был массив [prop], который не определен, поэтому обязательно измените его в своем коде. Это работало на то, что я думаю, что вы пытались сделать, поэтому дайте мне знать, если это поможет.

+0

Если вы удалите элемент из массива, его место будет заполнено с помощью 'undefined', поэтому лучший способ - фильтровать нужные элементы или нажать затем на новый массив. –

+0

Плакат также может использовать array.splice (obj, 1), если они не хотят оставлять неопределенные массивы там. –

+0

Тогда исправление вашего ответа состояло в том, чтобы изменить удаление с помощью сплайсинга. –

Смежные вопросы