JavaScript 数组处理问题?

作者站长头像
站长
· 阅读数 14

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