JavaScript 数组处理问题?
obj为条件 如果list符合obj条件 则list b = obj bobj.a为序号 obj.c为数量(整个数组的C为同一数值全是2或全是3)规则 list要符合obj条件 序号相同的length要大于等于obj.c符合条件触发list b = obj b 可以多次触发比如下例 list符合条件的为{a:01,b:2},{a:01,b:2},{a:01,b:2},{a:02,b:2},{a:03,b:2}
length为5 obj.c为2 触发两次 最后余1不满足条件 因触发list b = obj b 得{a:01,b:1},{a:01,b:1},{a:01,b:1},{a:02,b:1},{a:03,b:2}
b的值变化了例
var list = [{a:01,b:2},{a:01,b:2},{a:01,b:2},{a:02,b:2},{a:03,b:2},{a:06,b:7},{a:08,b:5}]
var obj = [{a:01,b:1,c:2},{a:02,b:1,c:2},{a:03,b:1,c:2},{a:04,b:1,c:2}]
结果为
list = [{a:01,b:1},{a:01,b:1},{a:01,b:1},{a:02,b:1},{a:03,b:2},{a:06,b:7},{a:08,b:5}]
前四个符合条件 b值变化 后面不符合条件无变化用js解 感谢!
回复
1个回答

test
2024-07-16
let objs = obj.reduce((o, i) => (o[i.a] = i.b, o), {})
let res = list.filter(item => objs.hasOwnProperty(item.a))
let c = obj[0]?.c
let length = res.length
if(length >= c){
res = res.slice(0, length - length % c)
}
res.forEach(item => item.b = objs[item.a])
console.log(list)
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容