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。是的,那也是生的。