我有一个对象数组,我试图循环以匹配特定值,如果找到则删除该对象,否则返回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)
}
}
我不确定哪个函数是从数组中删除对象的正确函数。
答案 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],所以一定要在代码中更改它。这适用于我认为你想要做的事情,所以让我知道它是否有帮助。