嘗試從數組列表中刪除對象,然後將其保存到數據庫.splice()
。儘管它正在拼接正確index
但未正確保存,但如果我splice
索引0
,其實際刪除索引1
在數據庫中,可能是因爲該對象已先拼接,因此它保存了錯誤的對象。NodeJs正確拼接陣列中的對象,但未刪除數據塊中的正確對象
var user =
{
"requests" : [
{
"name" : "Test1",
"id" : "590e6c94b2d6e52674992d16",
"email" : "[email protected]",
"user" : "test",
"accepted" : false
},
{
"name" : "Test2",
"id" : "590e6c8bb2d6e52674992d15",
"email" : "[email protected]",
"user" : "_test",
"accepted" : false
}
]
}
accepOrdeny對象例如,如果用戶test1
發送一個請求到xUser
-
{
"name" : "Test1",
"id" : "590e6c94b2d6e52674992d16",
"email" : "[email protected]",
"user" : "test",
"accepted" : false
}
如果請求已被接受,accepted
屬性boolean
將切換到true
並且如果拒絕,則accepted: false
。
{
"name" : "Test1",
"id" : "590e6c94b2d6e52674992d16",
"email" : "[email protected]",
"user" : "test",
"accepted" : true
}
剪接它和節省
let xd = user.requests.indexOf(acceptOrdeny);
user.requests.splice(xd, 1);
user.save(callback);
全碼邏輯 -
User.findOne({ _id: currUser._id }, function (err, user) {
if (err) throw err;
/* acceptOrdeny is the req.body object
checking if the key accepted==true then push acceptOrdeny object to friends[], splice from request[] then save to DB
*/
if (acceptOrdeny.accepted == true) {
user.friends.push(acceptOrdeny);
let indexReq = user.requests.indexOf(acceptOrdeny);
user.requests.splice(indexReq, 1);
user.save(callback);
console.log('accepted', indexReq)
}
/*
checking if the key accepted==false remove from requests[], then save current array[] list
*/
else {
let xd = user.requests.indexOf(acceptOrdeny);
user.requests.splice(xd, 1);
user.save(callback);
}
});
我已經測試splice
對象手冊等,這是好的,但它們拼接動態使用indexOf
不完全正確。
user.requests.splice(0, 1); // delete first obj in the array 'test1'
user.requests.splice(1, 1); // delete 2nd obj in the array 'test2'
是否有更好的方式刪除OBJ []列表中的對象,然後將其保存回數據庫?
編輯 輸出對象,它做的過濾器很好,但沒有刪除從requestsp[]
。
Request { user_added: '5910a77a0f03b33dbc482bfe',
name: 'Mark',
username: '_markie',
email: '[email protected]',
req_sent_by: 'Mark',
accepted: false }
accept/deny obj { user_added: '5910a77a0f03b33dbc482bfe',
name: 'Mark',
username: '_markie',
email: '[email protected]',
req_sent_by: 'Mark',
accepted: true }
AcceptOrdeny對您正在通過indexOf查找的相同確切對象的引用嗎? – James
是的,如果我只是console.log(acceptOrdeny)它給了我想要刪除的正確對象。 – MrNew
我看到'user.request'被定義了,但是你指的是'user.requests'。這只是一個錯誤的例子嗎? – Caleb