在数组上迭代时删除对象
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'",如果我删除delete运算符,它会正常工作。
这就是条目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
将新对象转换为条目数组:([[Entry]]
)
map
将条目([Entry]
)的每个数组(即[[Entry]]
的成员)转换为新对象(具有group: 1
和entries: [Entry]
或原始条目,但使用extend
添加了id
字段)。
相关文章:
- 解析JSON并从中删除对象会出错
- 在特定条件下从存储在localStorage中的阵列中删除对象
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 正在从列表中删除对象
- 删除对象时终止setInterval
- 在JavaScript中高效地删除对象
- 使用javascript(ajax,jquery?)从表中删除对象(用户等)
- 从范围中删除对象时,它会在 Angularjs 中隐藏其余对象
- 如何正确地从数组中删除对象
- 捕捉.svg — 单击其中一个元素时删除对象
- 如何删除对象数组中的对象:jquery
- 下划线.js,根据键值删除对象数组中的重复项
- 如何在Immutable中从数组中删除对象
- 删除对象属性在执行删除操作之前生效
- 使用indexOf从列表中删除对象
- 从数组中删除对象
- 如何使用.bind(this)删除对象的事件侦听器
- 正在创建事件侦听器以从本地存储中删除对象
- 如何通过引用(javascript)从数组中删除对象
- 如何按条件删除对象中的对象