繁体   English   中英

遍历数组时删除对象

[英]deleting a object while iterating over array

我一直在尝试不同的方法,但是它们都不起作用,但是这似乎是执行任务的最简单方法,即找到组(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');
    }
}
}

这个脚本似乎是我尝试过的最简单的脚本,但仍然无法正常工作。 删除当前条目后,下划线库函数_.find似乎会导致错误。在_.find所在的行,“ TypeError:无法读取未定义的属性'group'”,如果我删除了删除运算符,它将很好地工作。

这是结构STRUCTURE之前的样子

[
  {

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

和之后(应有)

[
  {

    id: 0,
    group: 1,
    entries: [
     {

       id: 0,
       idGroup: 1,
       data: "example"
     },
     {
       id: 2,
       idGroup: 1,
       data: "example"
     }
    ]
  },
  {
    id: 1,
    idGroup: null,
    data: "example"
 }
]
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()

groupBy将您的原始条目数组转换为键为idGroup且值是与条件匹配的条目数组的对象。

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

map将每个Entry( [Entry] )数组(是[[Entry]]的成员)转换为一个新对象( group: 1entries: [Entry]或原始Entry,但添加了id字段)使用extend )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM