对象数组中的空值

时间:2015-08-27 11:32:14

标签: javascript arrays angularjs splice array-splice

当文本框具有一些值(使用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)。

2 个答案:

答案 0 :(得分: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++ )
    {
    	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 );

或者在用于查找目标对象的循环中创建新数组,或者使用某种中间数组等。

希望它有所帮助!

答案 1 :(得分:-2)

var arrayWithoutNulls = myArray.filter(function(val) {
    if (val) {
        return val;
    }
});