要从数组中删除对象的函数

时间:2016-06-23 03:50:22

标签: javascript

我有一个对象数组,我试图循环以匹配特定值,如果找到则删除该对象,否则返回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: ""
   }
}]

JS:

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

我不确定哪个函数是从数组中删除对象的正确函数。

3 个答案:

答案 0 :(得分:1)

当子对象的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 :(得分: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]);

答案 2 :(得分:1)

因此,如果您要求的是循环遍历一个对象数组,并且找到属性的值然后删除它所属的对象,那么这就是我想出来的。

int

我修改了你的对象数组,但除了Obj1,Obj2等之外的所有东西都是因为数组已被索引,因此array [0]引用了Obj1。同样在你的if语句中你有一个未定义的数组[prop],所以一定要在代码中更改它。这适用于我认为你想要做的事情,所以让我知道它是否有帮助。