[英]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.