gpt4 book ai didi

javascript - 更新 Realm 中的数组对象

转载 作者:行者123 更新时间:2023-11-29 17:49:49 26 4
gpt4 key购买 nike

我有一个 Realm 组织和票证。一个组织有很多票。所以要更新组织,它看起来像这样:

    try {
realm.write(() => {
realm.create('Organization', {
id: organization.id,
name: organization.name,
ticket: downloadTickets(organization.id)
}
, true)
})
console.log("inserting/updating ogranization")
} catch(err) {
console.warn(err)
}

downloadTickets 函数返回一个对象数组。这将适用于我最初的写作。但是如果我想更新数组,我想将对象添加到数组而不是覆盖整个数组。如果不获取当前值、将其附加到新值并将其返回给对象,我该如何做到这一点?这似乎太慢了。

最佳答案

当您使用带有true 参数的create() 时,您将覆盖现有对象的属性。您想要的是修改现有数据。

为此,您必须以某种方式引用原始数组。您可以将新的 Ticketpush() 迭代到数组中,或者在现有数组上使用 concat() 并传递在新数组中。

try {
realm.write(() => {
var org = realm.create('Organization', {
id: organization.id,
name: organization.name
}
, true)

// Do this
var newTickets = downloadTickets(organization.id);
for(var i = 0; i < newTickets.length; i++) {
org.ticket.push(newTickets[i]);
}
// or this
org.ticket = org.ticket.concat(downloadTickets(organization.id));
})
console.log("inserting/updating ogranization")
} catch(err) {
console.warn(err)
}

附带说明:引用数组不会将整个内容加载到内存中。数组的实际数据只在磁盘上,直到您显式访问它,Realm 然后从磁盘读取它。访问数组以添加新的 Ticket 并不是一项昂贵的操作。

关于javascript - 更新 Realm 中的数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45075265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com