Javascript 删除数组中的特定值
例如,我有一个对象数组:Javascript 删除数组中的特定值,javascript,arrays,Javascript,Arrays,例如,我有一个对象数组: var myarray = [{ id: 01, name: alison, active: false}, { id: 04, name: drex, active: true}, { id: 08, name: farel, active: true}, { id: 09, name: dinkoy, active: true}]; 我想删除active==false或id=
var myarray = [{ id: 01, name: alison, active: false},
{ id: 04, name: drex, active: true},
{ id: 08, name: farel, active: true},
{ id: 09, name: dinkoy, active: true}];
我想删除active==false
或id==09
的一些对象
有任何代码建议吗?您可以使用
过滤器
功能:
myarray = myarray.filter(function(e){
return (e.active !== false) && (e.id !== 09);
});
或者使用一个简单的while循环,如下所示:
var i = 0;
while(i < myarray.length) {
if (myarray[i].active === false || myarray[i].id === 09) myarray.splice(i, 1);
else i++;
}
var i, item;
for (i = items.length-1; i >= 0; i--) {
item = items[i];
if (item.active===false || item.id = 9) {
items.splice(i, 1);
}
}
var i=0;
while(i
在这种实现中,维护索引可能会变得很棘手,所以选择您认为更方便的方法。使用
过滤器。更多
我建议对以下常见任务使用或:
var i = 0;
while(i < myarray.length) {
if (myarray[i].active === false || myarray[i].id === 09) myarray.splice(i, 1);
else i++;
}
var i, item;
for (i = items.length-1; i >= 0; i--) {
item = items[i];
if (item.active===false || item.id = 9) {
items.splice(i, 1);
}
}
下划线.js
myarray = _.reject(myarray, function(e){
return (e.active !== false) && (e.id !== 09);
});
sugar.js
myarray.remove(function(e){
return (e.active !== false) && (e.id !== 09);
});
原始JS循环:
for (i = myarray.length-1; i >= 0; i--) {
if (myarray[i].active === false || myarray[i].id === 09) myarray.splice(i, 1);
}
大概是这样的:
var i = 0;
while(i < myarray.length) {
if (myarray[i].active === false || myarray[i].id === 09) myarray.splice(i, 1);
else i++;
}
var i, item;
for (i = items.length-1; i >= 0; i--) {
item = items[i];
if (item.active===false || item.id = 9) {
items.splice(i, 1);
}
}
如您所见,使用倒计时循环是因为我们应该仔细修改迭代数组:)如果您使用JQuery,那么您可以使用'each'函数进行循环,然后拼接active==false的对象。您可以执行foreach循环并检查此条件active==false
,或id==09
下面是片段
方法1-
注意:此方法不影响数组的长度-即使在删除项目后,长度仍然为4
方法2-
这很好,数组的长度也会受到影响-2
希望能有所帮助。您要求修改原始数组,请使用筛选器创建新数组。使用的其他方法有forEach、reduce和reduceRight
由于forEach会记住原始数组,因此在删除成员时无需执行任何特殊操作:
myarray.forEach(function(v, i, arr) {
if (v.active == false || v.id == 09) arr.splice(i, 1);
});
reduceRight从长度变为0,因此在修改数组时更合适,因此:
myarray.reduceRight(function(p, c, i, arr) {
if (c.active == false || c.id == 09) arr.splice(i, 1);
},null);
但reduce与forEach类似,它会跟踪删除成员后的索引,因此:
myarray.reduce(function(p, c, i, arr) {
if (c.active == false || c.id == 09) arr.splice(i, 1);
},null);
同样有效。使用循环,然后拼接(索引,1)
您能通过答案向我展示它吗?我不熟悉Javascripts……请小心你的要求active==false
对于许多active值(例如未定义、0、null)将返回true,而不仅仅是false。而且09===9
。该死,我为什么不考虑向后迭代呢+1根据您建议的所有答案。filter
方法工作起来就像一个符咒:)仍然在试图弄清楚为什么有人会使用一个库来实现这一点,而普通JS的工作同样出色(或更好)。那有什么意义呢?过滤器也是“原始”JS。只有最后一个执行OP实际要求的操作(从数组中删除项)。如果有许多任务要执行,则可以使用此类LIB。是的,那也是生的。