Javascript 在数组上迭代时删除对象

Javascript 在数组上迭代时删除对象,javascript,arrays,object,underscore.js,Javascript,Arrays,Object,Underscore.js,我一直在尝试不同的方法,但没有一种有效,但这一种似乎是最简单的任务,即查找组(idGroup)内的条目,将它们包装到另一个数组(内部条目)中,并删除它所属数组外的条目 for(entry in entries) { if (entries[entry].idGroup) { var found = _.find(entries, function (num) { if(num.group == entries[entry].idGroup) { return num; } });

我一直在尝试不同的方法,但没有一种有效,但这一种似乎是最简单的任务,即查找组(idGroup)内的条目,将它们包装到另一个数组(内部条目)中,并删除它所属数组外的条目

for(entry in entries) {

if (entries[entry].idGroup) {

    var found = _.find(entries, function (num) { if(num.group == entries[entry].idGroup) { return num; } });

    if(found) {

        entries[_.indexOf(entries, found)].entries.push(entries[entry]);
        delete entries[entry];
        console.log('pushed');

    }else{

        entries.splice(entry,0, { group: entries[entry].idGroup, entries: [entries[entry]] });
        delete entries[entry];
        console.log('created');
    }
}
}
这个脚本似乎是我尝试过的所有脚本中最简单的一个,但仍然不起作用;删除当前条目后,似乎会导致下划线库函数u.find在u.find所在行的u.find“TypeError:Cannot read property'group'of undefined”出错,如果删除delete运算符,则效果良好

这就是条目结构以前的样子

[
  {

    id: 0,
    idGroup: 1,
    data: "example"
  },
  {
    id: 1,
    idGroup: null,
    data: "example"
  },
  {
    id: 2,
    idGroup: 1,
    data: "example"
 }
]
之后(应该如此)

或者更好,如果你喜欢的话

_.chain(arr)
  .groupBy(function(a) {return a.idGroup; })
  .toArray()
  .map(function(es, i) { 
    return (es.length > 1) ? {id: i, group: 1 , entries: es} : _.extend({id: i}, es[0]); 
  })
  .value()
groupBy
将原始条目数组转换为一个对象,该对象的键为
idGroup
,值为符合条件的条目数组

toArray
将新对象转换为条目数组:(
[[Entry]]


map
将每个条目数组(
[Entry]
)(即
[[Entry]]]
的成员)转换为新对象(具有
组:1
条目:[Entry]
或原始条目,但使用
扩展
添加了
id
字段)。

这非常令人困惑。您能否向我们展示
条目
包含的内容,并用几句话告诉我们预期的输出应该是什么?或者您到底想做什么?即使下划线不是函数库,修改当前正在迭代的列表也不太好。从u.groupBy开始,然后可能是每个或映射,怎么样?@istos解释得更好,抱歉。不完全确定您想要什么,但看看下划线提供的一些集合函数,例如并集、交集和差。@GruffBunny再次更新了它应该如何处理,抱歉,呵呵,也谢谢lossleader我会看一看,但如果你给我举个例子,我也会很感激。非常感谢!在接受答案之前,我先看看它是否工作正常。它工作得非常好!但是只有一个组,如果有一个条目的idGroup不是1,它将不会被添加到组数组中,请问您是否可以解决这个问题?嘿嘿,谢谢您的解释!我很抱歉,但实际上你能解决多组的问题吗?因为我主要问题中的脚本有这个能力。(我自己似乎也无法解决这个问题)我只是创建了另一个问题,因为您的答案中的代码存在某些问题,也因为我更好地组织了我的问题,以便它可能对其他人更有帮助。
arr = [
  {

    id: 0,
    idGroup: 1,
    data: "example"
  },
  {
    id: 1,
    idGroup: null,
    data: "example"
  },
  {
    id: 2,
    idGroup: 1,
    data: "example"
 }
];

b = _.groupBy(arr, function(a) {return a.idGroup; });
c = _.toArray(b);
d = _.map(c, function(es, i) { return (es.length > 1) ? {id: i, group: 1 , entries: es} : _.extend({id: i}, es[0]) });
_.chain(arr)
  .groupBy(function(a) {return a.idGroup; })
  .toArray()
  .map(function(es, i) { 
    return (es.length > 1) ? {id: i, group: 1 , entries: es} : _.extend({id: i}, es[0]); 
  })
  .value()