2015-08-27 2 views
1

Я создаю объекты, когда текстовое поле имеет некоторые значения (используя ng-blur и textbox.value!==undefined), а затем помещаю эти объекты в массив (все здесь отлично работает).Нулевые значения в массиве объектов

Когда я нажимаю на флажок (привязка модели флажка с текстовым полем ng-required) Мне нужно удалить этот конкретный объект, имеющий это значение текстового поля. Я использую:

arr.splice(index,1); 

удалить этот конкретный объект из массива (путем сопоставления его имя как «ежемесячно» или «квартальный» и т.д.), но это создает null в этой конкретной позиции.

, например. [Объект, предмет, объект]

[ 
{name:"monthly", 
    amount:1000 }, 

{name:"quarterly", 
    amount:1200 }, 

{name:"yearly", 
    amount:1300 } 
] 

после удаления всех элементов он показывает [] и когда я добавить еще один новый объект отображает [3:object] и его содержание, как [null,null,null,object];

или

если удалить средний объект name:"quarterly", показывает [object,object], но после добавления нового объекта он отображает массив как [object,object,null,object] с длиной массива как 4.

Почему существует null и как я могу удалить это из массива. (не хотите снова повторять, чтобы проверить null).

+0

Покажите нам код (предпочтительно plunkr). Splice не имеет такого эффекта. – sirrocco

+2

Как вы добавляете новые объекты в массив? Было бы лучше, если бы вы добавили фрагмент со всем соответствующим кодом. – David

+0

Вы используете loadash или подчеркивание? – learner

ответ

-2
var arrayWithoutNulls = myArray.filter(function(val) { 
    if (val) { 
     return val; 
    } 
}); 
+1

Если это было подходящим, тогда обратный вызов должен быть только: 'function (val) {return !! val}'. – RobG

2

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

Но могу сказать, что не ожидаемое поведение.

Вы можете увидеть этот пример, чтобы получить вдохновение:

var data = [ 
 
{name:"monthly", 
 
    amount:1000 }, 
 

 
{name:"quarterly", 
 
    amount:1200 }, 
 

 
{name:"yearly", 
 
    amount:1300 } 
 
]; 
 

 
var newObjectToBeAdded = { name: "daily", amount:"100" } 
 

 
function showObjects() 
 
{ 
 
    document.body.innerHTML += data + '<hr>'; 
 
} 
 

 
function deleteObjectByName(objectName) 
 
{ 
 
    for(var i = 0; i < data.length; i++) 
 
    { 
 
    \t if(data[ i ].name == objectName) 
 
     { 
 
      data.splice(i, 1); 
 
     } 
 
    } 
 
} 
 

 
function addObjectToData(newObject) 
 
{ 
 
    data.push(newObject); 
 
} 
 

 
showObjects(); 
 
deleteObjectByName("quarterly"); 
 
showObjects(); 
 
addObjectToData(newObjectToBeAdded); 
 
showObjects();

Просто бросить догадку из, может быть, вы случайно дублирует массив. Может быть, в каком-то момент вашего кода вы делаете что-то вроде этого:

var new_array = original_array.splice(index); 

Или создать новый массив в цикле вы используете, чтобы найти целевой объект, или с помощью какого-то промежуточного массива и т.д.

Надеюсь, это поможет!

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