JS按索引对比多维数组并将差异项补入第二个数组的实现问题
问题原因
你的原有代码错误嵌套了一层对整个customers数组的遍历,导致parent对应下标的子数组元素会被插入到所有customers子数组中,没有按照下标一一对应处理。
修改方案
只需要保留两层循环,外层遍历数组下标,拿到同下标的parent子数组和customers目标子数组,再遍历parent子数组的元素做判断插入即可:
const parent = [['ff@gmail.com', 'a@a.com', 'f@f.com'], ['ff@gmail.com']]; const customers = [['hh@gmail.com'], ['gg@gmail.com']]; for(let x = 0; x < parent.length; x++){ // 仅取当前下标对应的customers子数组作为目标 const targetSubArr = customers[x]; // 遍历当前parent子数组的每个邮箱元素 for(const email of parent[x]){ if(!targetSubArr.includes(email)){ targetSubArr.push(email); } } } console.log(customers) // 输出:[["hh@gmail.com", "ff@gmail.com", "a@a.com", "f@f.com"], ["gg@gmail.com", "ff@gmail.com"]]
如果你偏好更简洁的写法,也可以用forEach实现相同逻辑:
parent.forEach((parentSub, index) => { const target = customers[index]; parentSub.forEach(email => !target.includes(email) && target.push(email)); });
内容的提问来源于stack exchange,提问作者mynameiszsofia
相关产品推荐
相关产品推荐

