JavaScript 数组处理问题?

obj为条件 如果list符合obj条件 则list b = obj b
obj.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.5k
2 个回答
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)

《论语文课程在素质教育中的缺位》

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题