首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >比较两个对象数组并将数据推送到新数组中

比较两个对象数组并将数据推送到新数组中
EN

Stack Overflow用户
提问于 2021-04-18 12:08:53
回答 1查看 30关注 0票数 0

这里我比较了对象的b1和b2数组,并将数据添加到新的数组b3中,一切都很好,但是在数组b3中,只想获取一次有id和没有id的数组,在这种情况下,在新的数组b3中获得重复的数组元素。

代码语言:javascript
代码运行次数:0
运行
复制
let b3 = [];
let idss;
let b1 = [
  { batchReferenceNo: '118', receivedQty: 1 },
  { batchReferenceNo: '120', receivedQty: 1 },
  { batchReferenceNo: '100', receivedQty: 1 },
];
let b2 = [
  { id: 1, batchReferenceNo: '118', receivedQty: 1 },
  { id: 3, batchReferenceNo: '120', receivedQty: 1 },
];
console.log(b2);
b1.forEach((bno1) => {
  b2.forEach((bno2) => {
    if (bno1.batchReferenceNo == bno2.batchReferenceNo) {
      idss = bno2.id;
      let c1 = {
        id: idss,batchReferenceNo: bno1.batchReferenceNo,qty: bno1.receivedQty
      };
      b3.push(c1);
    }
    if (bno1.batchReferenceNo != bno2.batchReferenceNo) {
      idss = '';
      let c1 = {
        id: idss,batchReferenceNo: bno1.batchReferenceNo,qty: bno1.receivedQty
      };
      b3.push(c1);
    }
  });
});
console.log(b3);

请帮我解决这个问题,提前谢谢。

代码语言:javascript
代码运行次数:0
运行
复制
let b3 = [];
let idss;
let b1 = [
  { batchReferenceNo: '118', receivedQty: 1 },
  { batchReferenceNo: '120', receivedQty: 1 },
  { batchReferenceNo: '100', receivedQty: 1 },
];
let b2 = [
  { id: 1, batchReferenceNo: '118', receivedQty: 1 },
  { id: 3, batchReferenceNo: '120', receivedQty: 1 },
];
console.log(b2);
b1.forEach((bno1) => {
  b2.forEach((bno2) => {
    if (bno1.batchReferenceNo == bno2.batchReferenceNo) {
      idss = bno2.id;
      let c1 = {
        id: idss,batchReferenceNo: bno1.batchReferenceNo,qty: bno1.receivedQty
      };
      b3.push(c1);
    }
    if (bno1.batchReferenceNo != bno2.batchReferenceNo) {
      idss = '';
      let c1 = {
        id: idss,batchReferenceNo: bno1.batchReferenceNo,qty: bno1.receivedQty
      };
      b3.push(c1);
    }
  });
});
console.log(b3);

EN

回答 1

Stack Overflow用户

发布于 2021-04-18 12:30:14

如果b2b1的子集

b2数组中构造一个Map,其中映射键batchReferenceNo映射值是整个对象。现在,循环遍历b1数组并查看当前对象是否在映射中,如果是,则添加相应的id,如果否,则添加一个空字符串。

代码语言:javascript
代码运行次数:0
运行
复制
const 
  b1 = [{ batchReferenceNo: "118", receivedQty: 1 }, { batchReferenceNo: "120", receivedQty: 1 }, { batchReferenceNo: "100", receivedQty: 1 }],
  b2 = [{ id: 1, batchReferenceNo: "118", receivedQty: 1 }, { id: 3, batchReferenceNo: "120", receivedQty: 1 }],
      
  b2Map = new Map(b2.map((b) => [b.batchReferenceNo, b])),
  res = b1.map((b) =>
    b2Map.has(b.batchReferenceNo)
      ? { ...b, id: b2Map.get(b.batchReferenceNo).id }
      : { ...b, id: "" }
  );

console.log(res);

如果b2不是b1的子集

保留b2的所有元素,并添加b1中不在b2中的元素。

代码语言:javascript
代码运行次数:0
运行
复制
const 
  b1 = [{ batchReferenceNo: "118", receivedQty: 1 }, { batchReferenceNo: "120", receivedQty: 1 }, { batchReferenceNo: "100", receivedQty: 1 }],
  b2 = [{ id: 1, batchReferenceNo: "118", receivedQty: 1 }, { id: 3, batchReferenceNo: "120", receivedQty: 1 }],
  b2Map = new Map(b2.map((b) => [b.batchReferenceNo, b])),
  res = b1
    .reduce(
      (r, b) => (!b2Map.has(b.batchReferenceNo) && r.push({ ...b, id: "" }), r),
      []
    )
    .concat(b2);

console.log(res);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67145097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档