如何使用AngularJS从JSON对象中删除null?

3
我正在尝试从Json对象中删除一个对象,它可以工作,但是会用null替换它。我不知道为什么,如何从json中删除null值。以下是该函数的代码:
company.deleteExternalLinkFromGrid = function (row, matricule) {
        // console.log('Inside of deleteModal, code = ' + code);
        //$scope.sitting= {};
       console.log(matricule);
        //console.log(JSON.stringify(linkJsonObj));
        delete linkJsonObj[matricule];

        console.log(JSON.stringify(linkJsonObj));
    };

这是对象:

[{"name":"xxx","link":"www.ddd.com","id":0,"$$hashKey":"uiGrid-001Z"},null,null]


1
请显示matricule。它是关键字还是索引? - Kirill Matrosov
1
发出 delete 不会删除任何东西,它只会取消定义值。数组的长度不会受到影响。 - devnull69
2
尝试使用 linkJsonObj.splice(linkJsonObj.indexOf(matricule), 1) - Ivar
1
除非matricule是索引。在这种情况下,请使用linkJsonObj.splice(matricule, 1) - Ivar
1
@paperpaper,你在问题中展示了一个对象数组。空值是数组中的元素,而数组没有键。 - Ivar
显示剩余4条评论
3个回答

2
您可以使用filter()函数,x将不包含null值。
function test()
{
    var x =[{"name":"xxx","link":"www.ddd.com","id":0,"$$hashKey":"uiGrid-001Z"},null,null].filter(isNotNull);
    alert(JSON.stringify(x));

}

function isNotNull(value) {
  return value != null;
}

fiddle


0
JavaScript中有多种方法可以从对象数组中删除对象。为此,您不需要使用AngularJS,可以使用VanillaJS。
如果您只想过滤空值,可以使用以下代码:
var yourArray =[{"name":"xxx","link":"www.ddd.com","id":0,"$$hashKey":"uiGrid-001Z"},null,null];
     yourArray = yourArray.filter(function(elt){
     return elt != null;
    });

但这会丢失您对象的原始引用。

如果您想保留引用,请使用array.splice()。

  yourArray.forEach(function(){ 
      yourArray.splice(yourArray.indexOf(null),1);
  });   

现在你的数组中将没有空值。这实际上是从数组中删除一个对象而不改变引用。


这是一个注释,不是答案。您可以请至少提供一个简单的示例代码来支持您的说法吗? - cezar
好的,我会翻译,但问题不太清楚。如果paper-paper需要一个新对象还是同一个对象引用? - Jins Peter

-1

delete 会用 undefined 替换对象

您可以使用 Array#filter() 过滤数组以将它们删除

var array = [{
  "name": "xxx",
  "link": "www.ddd.com",
  "id": 0,
  "$$hashKey": "uiGid-001Z"
}, {
  "name": "xx",
  "link": "www.dddcom",
  "id": 1,
  "$$hashey": "uiGrid-0029"
}, {
  "name": "xxx",
  "link": "www.ddd.com",
  "id": 2
}];

delete array[1];

array = array.filter(a=>a);

console.log(JSON.stringify(array));


为什么被踩了?filter是从数组中过滤值的正确方式。 - cezar
@charlietfl 是的,你是对的,不需要使用 delete - cezar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接