Javascript 如何停止将对象转换为数组?
我在这里很困惑。我正在传递一个名为ScheduleAdd的对象,并使用insertAt将该对象输入到名为“schedules”的数组中,该数组存在于表“teachers”中的每个文档中。重新思考抛出的错误插入值必须是OBJECT Get数组。它向我显示了一个数组,该数组由传递的对象组成,周围有方括号 代码: 例如,我可能会传递对象:Javascript 如何停止将对象转换为数组?,javascript,arrays,rethinkdb,Javascript,Arrays,Rethinkdb,我在这里很困惑。我正在传递一个名为ScheduleAdd的对象,并使用insertAt将该对象输入到名为“schedules”的数组中,该数组存在于表“teachers”中的每个文档中。重新思考抛出的错误插入值必须是OBJECT Get数组。它向我显示了一个数组,该数组由传递的对象组成,周围有方括号 代码: 例如,我可能会传递对象: { schedule: 'weekend', visible: 'yes' } console.log确认对象的格式正确。然而,重新思考将抛出错误: 'Inser
{ schedule: 'weekend', visible: 'yes' }
console.log确认对象的格式正确。然而,重新思考将抛出错误:
'Inserted value must be an OBJECT (got ARRAY):\n["{\\n \\"schedule\\": \\"weekend\\",\\n \\"visible\\": \\"yes\\"\\n}"]',
Inserted value must be an OBJECT (got ARRAY):
[{
"name": "second"
}, {
"name": "first"
}]
你知道为什么我的对象会被转换成数组,以及如何阻止它发生吗?谢谢 从文档中可以看出,update需要一个对象或一个返回对象的表达式,在您的情况下,您需要传递表达式:
function(teacher) {return teacher('schedules').insertAt(0,scheduleAdd)}
insertAt也会从文档中返回修改后的数组。这意味着您的表达式返回的是计划的新数组,而不是更新的对象。结果,update在需要对象时尝试插入数组。要演示这一点,请尝试运行:
r.db('test').table('teachers').insert({schedules:[{name:"first"}]});
r.db('test').table('teachers').update(function(teacher) {return teacher('schedules').insertAt(0,{name:"second"})})
您将得到以下错误:
'Inserted value must be an OBJECT (got ARRAY):\n["{\\n \\"schedule\\": \\"weekend\\",\\n \\"visible\\": \\"yes\\"\\n}"]',
Inserted value must be an OBJECT (got ARRAY):
[{
"name": "second"
}, {
"name": "first"
}]
修改后的{name:second}数组正确地位于行中现有schedules数组的前面,新数组由insertAt返回。但是,update无法插入数组,因此引发错误
要解决此问题,您可以使用:
r.db('test').table('teachers').update({schedules : r.row('schedules').insertAt(0,scheduleAdd)})
或
谢谢-太好了。在输入其他几个对象后,如果要删除该条目,该如何处理?我知道我可以使用deleteAt,但我很难在schedules数组中计算出我要删除的元素的索引号,每个教师的索引号都会不同。@user3220303您可以使用deleteAt或difference,或任何其他函数,这实际上取决于您有哪些关于要从阵列中删除的计划的信息。如果你仍然有困难,我建议你打开一个新的问题,再多问一些细节。再次感谢。