データベースから読み込まれたデータオブジェクトがあります。ユーザーはページ上のオプションを選択することができ、初期オブジェクトに存在しないオプションのそれぞれについて、それらを作成する必要があります。オブジェクト上のJavascriptループと配列から欠落したオブジェクトを作成する
私はここで何をしようとしているのか疑問符を書きましたが、メモリ問題が発生してクラッシュしました。
ここでの目標は、それぞれtask
>Roles
の配列を繰り返して、作成する必要のある欠けているオブジェクトがあるかどうかを確認することです。作成する必要のあるオブジェクトはselectedRoles
です。
望ましい結果:最初のタスクで
、それはその現在の空のように3つのロールを作成する必要があります。 2番目のタスクでは、IDが2のロールがすでに存在するため、ロール1とロール3が作成されます。
var tasks = [{
"User": {
"FirstName": "Joe",
"LastName": "Dirt",
"selected": false,
"marked": false
},
"Tool": {
"id": 31,
"text": "Admin",
"ToolID": "31",
"ToolName": "Admin",
"ToolSuite": "Enterprise Product"
},
"Roles": []
}, {
"User": {
"FirstName": "Bart",
"LastName": "Simpson",
"selected": false,
"marked": false
},
"Tool": {
"id": 35,
"text": "Wordpress",
"ToolID": "35",
"ToolName": "Wordpress",
"ToolSuite": "Enterprise Product"
},
"Roles": [{
RoleName: 'Role 2',
Role: 2,
RoleID: 2
}]
}];
// New selected roles from list
var selectedRoles = [1, 2, 3];
////////////////////////////////////////////////////////////////////////
/*
Loop over the configured tasks and
if there is not an existing role
matching a role id from "SelectedRoles",
create a new role within that task.
*/
// Loop over the tasks
tasks.forEach((task) => {
// If we have roles, loop over them
if (task.Roles.length) {
for (let i = 0; i < task.Roles.length; i++) {
// If this roleID does not exist in our selectedRoles, create the task
if(selectedRoles.indexOf(task.Roles[i].RoleID) >= 0){
// Create this role and add it to our task
task.Roles.push(createRole('Role ' + task.Roles[i].RoleID, task.Roles[i].RoleID, task.Roles[i].RoleID));
}
}
}
});
console.log(tasks)
function createRole(RoleName, RoleID, Role){
return {
RoleName: RoleName,
RoleID: RoleID,
Role: Role
}
}
これを処理するためのよりクリーンな(そして実際的な)方法に関する考えはありますか?ここで
ありがとうございました!デモが動作するように見える、統合は同じでなければならない:) - それを感謝する! – SBB