gpt4 book ai didi

javascript - 遍历嵌套循环并删除与条件匹配的特定索引

转载 作者:行者123 更新时间:2023-12-01 15:59:35 32 4
gpt4 key购买 nike

我有一个临时数组,最初看起来像这样:

[{emp_id:1, acitivty:'run'}, {emp_id: 2, activity:'climb'}, {emp_id:1,activity:'swim'} .....]

现在,我想要的是合并具有相同 emp_id 的对象。它应该看起来像这样:

[{emp_id:1, activity:'run', activity2:'swim'}, {emp_id:'2',activity:'climb'} .....]

相反,我只得到了这个,没有显示数组中的其余对象:

[{emp_id:'1', activity:'run', activity2:'swim'}]

在我的代码中,当满足条件并完成合并和拼接时,我将 z 递减,因为我认为在拼接之后,数组将被重新索引并且我认为数组长度仍然会照原样。似乎是什么问题?

for(var z = 0; z < temp.length; z++) {
for(var x = 1; x < temp.length; x++) {
if(temp[z].emp_id == temp[x].emp_id) {
var ot_key = 'ot_time'+x+1;
var status_key = 'status'+x+1;
var dtr_key = 'dtr_out'+x+1;
Object.assign(temp[z], {
[ot_key] : temp[x].ot_time,
[status_key] : temp[x].status,
[dtr_key] : temp[x].dtr_out
})
temp.splice(x, 1);
z--;
}
}
}

最佳答案

除了拼写之外,您还可以获取一个对象并将所需的后缀存储在对象中。稍后获取有效负载。

例如,在获取值并仅映射 payload 属性之前查看最终对象:

{
1: {
index: 3,
payload: { emp_id: 1, activity: "run", activity2: "swim" }
},
2: {
index: 2,
payload: { emp_id: 2, activity: "climb" }
}
}

此处 emp_id 被用作分组的键,并且由于所需的结构,index 也被分组,以便为​​进一步的事件提供值(value)。

var data = [{ emp_id: 1, activity: 'run' }, { emp_id: 2, activity: 'climb' }, { emp_id: 1, activity: 'swim' }],
result = Object
.values(data.reduce((r, { emp_id, activity }) => {
if (r[emp_id]) r[emp_id].payload['activity' + r[emp_id].index++] = activity;
else r[emp_id] = { index: 2, payload: { emp_id, activity } };
return r;
}, {}))
.map(({ payload }) => payload);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

更好的方法是为事件使用数组。

var data = [{ emp_id: 1, activity: 'run' }, { emp_id: 2, activity: 'climb' }, { emp_id: 1, activity: 'swim' }],
result = Object.values(data.reduce((r, { emp_id, activity }) => {
if (r[emp_id]) r[emp_id].activity.push(activity);
else r[emp_id] = { emp_id, activity: [activity] };
return r;
}, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 遍历嵌套循环并删除与条件匹配的特定索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60911317/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com