[英]How i can get only the difference between two array objects keeping one property?
我有这两个对象数组:
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"
}
]
我需要通过属性screen_id
比较这两个 arrays 并返回changedGroupScreen
保留属性screen_id
的差异。
我需要这个结果:
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
}]
我收到:无法设置未定义的属性 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++
}
}
}
}
如果有人需要这样的东西,我可以这样工作:
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++
}
}
}
}
可能不是最好的解决方案(这么多代码),但按我的预期工作。 (如果您有一些技巧可以做得更好,请随时发表评论)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.