如何处理 vuex-orm 中的嵌套对象
how to handle nested objects in vuex-orm
我有这个对象:
userRights
{
"admin": true,
"rights": [
{
"id": 1,
"value": true
},
{
"id": 2,
"value": true
},
{
"id": 3,
"value": true
},
{
"id": 4,
"value": true
},
{
"id": 5,
"value": true
},
{
"id": 6,
"value": true
},
{
"id": 7,
"value": true
}
]
}
value
应该与映射的 id
一起映射到这个对象数组中:
rights
[
{
idModule: 1,
name: 'admin.rights',
caption: 'Rechte verwalten',
default: false,
id: 1,
},
{
idModule: 1,
name: 'reports',
caption: 'Reports einsehen',
default: false,
id: 2,
},
{
idModule: 1,
name: 'admin.maintenance',
caption: 'Wartungsarbeiten durchführen',
default: false,
id: 3,
},
{
idModule: 2,
name: 'users',
caption: 'Benutzer einsehen',
default: false,
id: 4,
},
{
idModule: 2,
name: 'users.write',
caption: 'Benutzer anlegen, ändern',
default: false,
id: 5,
},
{
idModule: 2,
name: 'users.passwords',
caption: 'Benutzer-Passwörter ändern',
default: false,
id: 6,
},
{
idModule: 2,
name: 'users.delete',
caption: 'Benutzer löschen',
default: false,
id: 7,
},
];
userRights.rights
中的 id 应该映射到 rights[0].id
的 id,然后应该在 rights
对象数组中创建一个新元素作为 value: true/false
。
atm 我这样做了,但我卡住了:
rights.js
import { Model } from '@vuex-orm/core';
import userRights from './userRights';
export default class Right extends Model {
static entity = 'right';
static fields() {
return {
id: this.attr(null),
idModule: this.attr(null),
name: this.attr(''),
caption: this.attr(''),
default: this.attr(null),
value: this.belongsTo(userRight, 'rights.value'),
};
}
}
-----------------------------------
userRights.js
import { Model } from '@vuex-orm/core';
export default class UserRight extends Model {
static entity = 'userRight';
static fields() {
return {
admin: this.attr(null),
rights: this.attr([]),
};
}
}
我怎样才能做到这一点?
您可以利用 map
来实现。
var userRights = { "admin": true, "rights": [ { "id": 1, "value": true }, { "id": 2, "value": true }, { "id": 3, "value": true }, { "id": 4, "value": true }, { "id": 5, "value": true }, { "id": 6, "value": false }, { "id": 7, "value": true } ]}
var rights = [ { idModule: 1, name: 'admin.rights', caption: 'Rechte verwalten', default: false, id: 1, }, { idModule: 1, name: 'reports', caption: 'Reports einsehen', default: false, id: 2, }, { idModule: 1, name: 'admin.maintenance', caption: 'Wartungsarbeiten durchführen', default: false, id: 3, }, { idModule: 2, name: 'users', caption: 'Benutzer einsehen', default: false, id: 4, }, { idModule: 2, name: 'users.write', caption: 'Benutzer anlegen, ändern', default: false, id: 5, }, { idModule: 2, name: 'users.passwords', caption: 'Benutzer-Passwörter ändern', default: false, id: 6, }, { idModule: 2, name: 'users.delete', caption: 'Benutzer löschen', default: false, id: 7}];
result = rights.map(val=>{
val.value = userRights.rights.find(k=>k.id==val.id).value;
return val;
});
console.log(result);
我有这个对象:
userRights
{
"admin": true,
"rights": [
{
"id": 1,
"value": true
},
{
"id": 2,
"value": true
},
{
"id": 3,
"value": true
},
{
"id": 4,
"value": true
},
{
"id": 5,
"value": true
},
{
"id": 6,
"value": true
},
{
"id": 7,
"value": true
}
]
}
value
应该与映射的 id
一起映射到这个对象数组中:
rights
[
{
idModule: 1,
name: 'admin.rights',
caption: 'Rechte verwalten',
default: false,
id: 1,
},
{
idModule: 1,
name: 'reports',
caption: 'Reports einsehen',
default: false,
id: 2,
},
{
idModule: 1,
name: 'admin.maintenance',
caption: 'Wartungsarbeiten durchführen',
default: false,
id: 3,
},
{
idModule: 2,
name: 'users',
caption: 'Benutzer einsehen',
default: false,
id: 4,
},
{
idModule: 2,
name: 'users.write',
caption: 'Benutzer anlegen, ändern',
default: false,
id: 5,
},
{
idModule: 2,
name: 'users.passwords',
caption: 'Benutzer-Passwörter ändern',
default: false,
id: 6,
},
{
idModule: 2,
name: 'users.delete',
caption: 'Benutzer löschen',
default: false,
id: 7,
},
];
userRights.rights
中的 id 应该映射到 rights[0].id
的 id,然后应该在 rights
对象数组中创建一个新元素作为 value: true/false
。
atm 我这样做了,但我卡住了:
rights.js
import { Model } from '@vuex-orm/core';
import userRights from './userRights';
export default class Right extends Model {
static entity = 'right';
static fields() {
return {
id: this.attr(null),
idModule: this.attr(null),
name: this.attr(''),
caption: this.attr(''),
default: this.attr(null),
value: this.belongsTo(userRight, 'rights.value'),
};
}
}
-----------------------------------
userRights.js
import { Model } from '@vuex-orm/core';
export default class UserRight extends Model {
static entity = 'userRight';
static fields() {
return {
admin: this.attr(null),
rights: this.attr([]),
};
}
}
我怎样才能做到这一点?
您可以利用 map
来实现。
var userRights = { "admin": true, "rights": [ { "id": 1, "value": true }, { "id": 2, "value": true }, { "id": 3, "value": true }, { "id": 4, "value": true }, { "id": 5, "value": true }, { "id": 6, "value": false }, { "id": 7, "value": true } ]}
var rights = [ { idModule: 1, name: 'admin.rights', caption: 'Rechte verwalten', default: false, id: 1, }, { idModule: 1, name: 'reports', caption: 'Reports einsehen', default: false, id: 2, }, { idModule: 1, name: 'admin.maintenance', caption: 'Wartungsarbeiten durchführen', default: false, id: 3, }, { idModule: 2, name: 'users', caption: 'Benutzer einsehen', default: false, id: 4, }, { idModule: 2, name: 'users.write', caption: 'Benutzer anlegen, ändern', default: false, id: 5, }, { idModule: 2, name: 'users.passwords', caption: 'Benutzer-Passwörter ändern', default: false, id: 6, }, { idModule: 2, name: 'users.delete', caption: 'Benutzer löschen', default: false, id: 7}];
result = rights.map(val=>{
val.value = userRights.rights.find(k=>k.id==val.id).value;
return val;
});
console.log(result);