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)。

4

2 回答 2

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 );

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

希望能帮助到你!

于 2015-08-27T12:41:50.280 回答
-2
var arrayWithoutNulls = myArray.filter(function(val) {
    if (val) {
        return val;
    }
});
于 2015-08-27T11:38:46.943 回答