下面是我在js中拥有的两个对象数组:

var arr_A = [
  {Name: "Smith", CheckedOut: true},
  {Name: "Jane", CheckedOut: true},
]

var arr_B = [
  {Name: "Smith", CheckedIn: true},
  {Name: "Paul", CheckedIn: true},
  {Name: "Wagen", CheckedIn: true},
]

如果找到重复项,我想设置为CheckedOut: true, CheckedIn: true.

如果它不是副本,我想根据它们的属性值设置CheckedOut: false, CheckedIn: trueCheckedOut: true, CheckedIn: false.

以下是该示例的估计结果:

[
  {Name: "Smith", CheckedOut: true, CheckedIn: true},
  {Name: "Jane", CheckedOut: true, CheckedIn: false},
  {Name: "Paul", CheckedOut: false, CheckedIn: true},
  {Name: "Wagen", CheckedOut: false, CheckedIn: true},
]

这就是我所做的:

let result = [];

for(var i=0; i<arr_B.length; i++){
  for(var j=0; j<arr_A.length; j++) {
    if(arr_A[j].Name == arr_B[i].Name) {
      result.push({
         Name: arr_A[j].Name,
         CheckedIn: true,
         CheckedOut: true
        })
    } else {
      if(arr_A[j].CheckedOut){
       result.push({
         Name: arr_A[j].Name,
         CheckedOut: true,
         CheckedIn: false
       })
      } else {
         result.push({
           Name: arr_A[j].Name,
           CheckedOut: false,
           CheckedIn: true
       })
      }
    }

  }
}

推荐答案

使用类似userName: {Name:..., CheckedIn:... CheckedOut:...}的对象累加值:

let diff = {}

for (let r of arr_A) {
    diff[r.Name] = {Name: r.Name, CheckedIn: false, CheckedOut: true}
}

for (let r of arr_B) {
    if (r.Name in diff)
        diff[r.Name].CheckedIn = true
    else
        diff[r.Name] = {Name: r.Name, CheckedIn: true, CheckedOut: false}
}

之后,Object.values(diff)将返回您要查找的数据.

Javascript相关问答推荐

如果被1个Phaser JS抵消,我的倾斜碰撞

功能和普通对象之间的原型污染

如何expose 像React在onChange、onClick等中所做的那样的参数?

如何使用CSS和JavaScript创建粘性、凝聚力的形状到形状(容器)变形?

橡皮擦完全让画布变成白色

为什么在集内和集外会产生不同的promise 状态(使用Promise.race)?

如何使用React渲染器放置根dis?

RxJS setTimeout操作符等效

有Angular 的material .未应用收件箱中的价值变化

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

node TS:JWT令牌签名以验证客户端和后台问题之间的身份验证

未捕获错误:在注销后重定向到/login页面时找不到匹配的路由

Rehype将hashtag呈现为URL

无法读取未定义错误的属性路径名''

可更改语言的搜索栏

在css中放置所需 colored颜色 以填充图像的透明区域

传递方法VS泛型对象VS事件特定对象

Next.js中的服务器端组件列表筛选

FireBase FiRestore安全规则-嵌套对象的MapDiff

我的NavLink活动类在REACT-ROUTER-V6中出现问题