简体   繁体   English

我如何才能仅获得保留一个属性的两个数组对象之间的差异?

[英]How i can get only the difference between two array objects keeping one property?

I have this two array of objects:我有这两个对象数组:

const groupScreens = [
  {
      "id": "6b7c1891-e98f-4ca5-87db-7d4578268b8f",
      "name": "Cad 1",
      "screen_id": "7b9bb725-2fa8-4416-a664-37395d28da95",
      "group_id": "319588ba-8c5d-474b-aaf2-2ea8fbfed898",
      "allow_read": false,
      "allow_create": true,
      "allow_update": false,
      "allow_delete": false,
      "created_at": "2020-04-07 08:32:58",
      "updated_at": "2020-04-07 08:32:58"
  },
  {
      "id": "7ae7c727-6dd3-43ab-be91-816e34da42ce",
      "name": "Cad 2",
      "screen_id": "b1793127-09f1-4c70-982d-c2cea57709ee",
      "group_id": "319588ba-8c5d-474b-aaf2-2ea8fbfed898",
      "allow_read": true,
      "allow_create": true,
      "allow_update": true,
      "allow_delete": true,
      "created_at": "2020-04-07 08:32:58",
      "updated_at": "2020-04-07 08:32:58"
  },
  {
      "id": "1de0a773-9df8-4e7c-98c0-e12d2f79a3d3",
      "name": "Cad 3",
      "screen_id": "b829677f-c597-48e5-b50d-736b0a1bda00",
      "group_id": "319588ba-8c5d-474b-aaf2-2ea8fbfed898",
      "allow_read": true,
      "allow_create": true,
      "allow_update": false,
      "allow_delete": true,
      "created_at": "2020-04-07 08:32:58",
      "updated_at": "2020-04-07 08:32:58"
  }
]

const changedGroupScreen = [
  {
      "id": "6b7c1891-e98f-4ca5-87db-7d4578268b8f",
      "name": "Cad 1",
      "screen_id": "7b9bb725-2fa8-4416-a664-37395d28da95",
      "group_id": "319588ba-8c5d-474b-aaf2-2ea8fbfed898",
      "allow_read": false,
      "allow_create": true,
      "allow_update": true,
      "allow_delete": true,
      "created_at": "2020-04-07 08:32:58",
      "updated_at": "2020-04-07 08:32:58"
  },
  {
      "id": "7ae7c727-6dd3-43ab-be91-816e34da42ce",
      "name": "Cad 2",
      "screen_id": "b1793127-09f1-4c70-982d-c2cea57709ee",
      "group_id": "319588ba-8c5d-474b-aaf2-2ea8fbfed898",
      "allow_read": true,
      "allow_create": true,
      "allow_update": true,
      "allow_delete": true,
      "created_at": "2020-04-07 08:32:58",
      "updated_at": "2020-04-07 08:32:58"
  },
  {
      "id": "1de0a773-9df8-4e7c-98c0-e12d2f79a3d3",
      "name": "Cad 3",
      "screen_id": "b829677f-c597-48e5-b50d-736b0a1bda00",
      "group_id": "319588ba-8c5d-474b-aaf2-2ea8fbfed898",
      "allow_read": true,
      "allow_create": true,
      "allow_update": false,
      "allow_delete": false,
      "created_at": "2020-04-07 08:32:58",
      "updated_at": "2020-04-07 08:32:58"
  }
]

I need to compare this two arrays by the property screen_id and return the differences that is in changedGroupScreen keeping the property screen_id .我需要通过属性screen_id比较这两个 arrays 并返回changedGroupScreen保留属性screen_id的差异。

I need this result:我需要这个结果:

const result = [{
    "screen_id": "7b9bb725-2fa8-4416-a664-37395d28da95",
    "allow_update": true,
    "allow_delete": true
}, {
    "screen_id": "b829677f-c597-48e5-b50d-736b0a1bda00",
    "allow_delete": false
}]

I'm receiving: Cannot set property screen_id of undefined:我收到:无法设置未定义的属性 screen_id:

let result = [{}]
let countResult = 0
let foundedDifference = false
for (let i_group_screens = 0 ; i_group_screens < groupScreens.length; i_group_screens++) {
  foundedDifference = false
  for (let i_changed = 0; i_changed < changedGroupScreen.length; i_changed++) {
    if (groupScreens[i_group_screens].screen_id === changedGroupScreen[i_changed].screen_id) {
      if(groupScreens[i_group_screens].allow_read !== changedGroupScreen[i_changed].allow_read) {
        result[countResult].screen_id = groupScreens[i_group_screens].screen_id
        result[countResult].allow_read = changedGroupScreen[i_changed].allow_read
        foundedDifference = true
      }
      if(groupScreens[i_group_screens].allow_create !== changedGroupScreen[i_changed].allow_create) {
        result[countResult].screen_id = groupScreens[i_group_screens].screen_id
        result[countResult].allow_create = changedGroupScreen[i_changed].allow_create
        foundedDifference = true
      }
      if(groupScreens[i_group_screens].allow_update !== changedGroupScreen[i_changed].allow_update) {
        console.log(countResult)
        result[countResult].screen_id = groupScreens[i_group_screens].screen_id
        result[countResult].allow_update = changedGroupScreen[i_changed].allow_update
        foundedDifference = true
      }
      if(groupScreens[i_group_screens].allow_delete !== changedGroupScreen[i_changed].allow_delete) {
        result[countResult].screen_id = groupScreens[i_group_screens].screen_id
        result[countResult].allow_delete = changedGroupScreen[i_changed].allow_delete
        foundedDifference = true
      }
      if(foundedDifference === true) {
        countResult++
      }
    }
  }
}

If someone needs something like this, i make this work this way:如果有人需要这样的东西,我可以这样工作:

let result = []
let countResult = 0
let foundedDifference = false

for (let i_group_screens = 0 ; i_group_screens < groupScreens.length; i_group_screens++) {
  foundedDifference = false
  for (let i_changed = 0; i_changed < changedGroupScreen.length; i_changed++) {
    if (groupScreens[i_group_screens].screen_id === changedGroupScreen[i_changed].screen_id) {
      if(groupScreens[i_group_screens].allow_read !== changedGroupScreen[i_changed].allow_read) {
        let obj = {screen_id: groupScreens[i_group_screens.screen_id], allow_read: changedGroupScreen[i_changed].allow_read}
        result.push(obj)
        foundedDifference = true
      }
      if(groupScreens[i_group_screens].allow_create !== changedGroupScreen[i_changed].allow_create) {
        if (foundedDifference === true) {
          result[countResult].allow_create = changedGroupScreen[i_changed].allow_create
        } else {
          let obj = {screen_id: groupScreens[i_group_screens].screen_id, allow_create: changedGroupScreen[i_changed].allow_create}
          result.push(obj)
        }
      }
      if(groupScreens[i_group_screens].allow_update !== changedGroupScreen[i_changed].allow_update) {
        if (foundedDifference === true) {
          result[countResult].allow_update = changedGroupScreen[i_changed].allow_update
        } else {
          let obj = {screen_id: groupScreens[i_group_screens].screen_id, allow_update: changedGroupScreen[i_changed].allow_update}
          result.push(obj)
        }
        foundedDifference = true
      }
      if(groupScreens[i_group_screens].allow_delete !== changedGroupScreen[i_changed].allow_delete) {
        if(foundedDifference === true) {
          result[countResult].allow_delete = changedGroupScreen[i_changed].allow_delete
        }else {
          let obj = {screen_id: groupScreens[i_group_screens].screen_id, allow_delete: changedGroupScreen[i_changed].allow_delete}
          result.push(obj)
        }
        foundedDifference = true
      }
      if(foundedDifference === true) {
        countResult++
      }
    }
  }
}

Probably not the best solution (so much code) but is working like i expect.可能不是最好的解决方案(这么多代码),但按我的预期工作。 (If you have some trick to do this better, feel free to comment) (如果您有一些技巧可以做得更好,请随时发表评论)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何获得两个数组之间的差异,但保持重复对象 - How to get the difference between two arrays but keeping repeat objects 获取javascript中两个对象之间差异的属性 - Get the property of the difference between two objects in javascript 如何循环遍历 object 数组并从数组中列出的两个对象中获取一个属性元素? - How can I loop through an array of object and get one property element out of the two objects listed inside the array? 如何获取数组中两个或多个对象之间的数量差异? - How to get the number difference between two or more objects in an array? 如何在不同属性比较器的两个对象数组之间获得差异? - How to get difference between two array of object with different property comparer? 如何获得两个对象之间的差异? - How to get the difference between two objects? 当我将参数插入 function 时,如何根据特定属性筛选对象数组并仅返回一个属性? - how can I filter an array of objects based on a specific property and return only one property when I insert the parameter into the function? 如何区分两个 FIFO 数组状态? - How do I get the difference between two FIFO array states? 比较两个对象数组,只得到数组的不同属性 - Compare two array of objects and get only the different Property of the array 如何过滤两个日期之间的对象数组? - How can I filter an array of objects between two dates?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM