我在将对象推到对象上时遇到问题。我成功地将一个数组推到了对象上,但我在前者失败了。
这就是我所拥有的
var lapList = [1,2,3,4];
var users = [{sets: [{
reps: []
}]
},
{sets: [{
reps: []
}]
}];
var activeUser = users[0];
var activeSet = activeUser.sets[activeUser.sets.length-1];
activeSet.reps.push({laps: lapList});
console.log('good');
console.log(users);
activeSet.push({reps: [{laps: lapList}]});
console.log('also good');
console.log(users);
我在控制台中获得了第一个“好”,我可以看到该数组已成功添加到用户。但是,在第二次测试中,我试图添加一个新的reps部分,它失败了,我得到一个TypeError:undefined不是一个函数。
有什么想法吗?
答案 0 :(得分:3)
我认为你的结构没有正确定义:
用户看起来像:
[
{sets: [{reps: []}]},
{sets: [{reps: []}]}
];
这是一个包含两个对象作为值的数组
activeUser是数组中的第一个对象,如下所示:
{sets: [{reps: []}]}
activeSet只是reps,一个数组
您的第一个电话:
activeSet.reps.push({laps: lapList});
这样可以正常使用,
你的第二个电话:
activeSet.push({reps: [{laps: lapList}]});
这是没有意义的,因为activeSet是reps是一个对象
您可以将其推送到activeUser.sets,这可能是您真正想要的
activeUser.sets.push({reps: [{laps: lapList}]});
答案 1 :(得分:0)
正如评论中所提到的,JS对象没有push
方法。
您可能想要这样做:
activeSet.reps.push({laps: lapList});
或者
activeSet.reps = [{laps: lapList}];
我不完全确定您使用此数据结构建模的内容,但这些是您应该能够对对象执行的操作类型。
答案 2 :(得分:0)
activeSet
是一个对象。 activeSet.reps
是一个数组。 push是一种数组方法。
将新对象推送到数组
activeUser.sets.push({reps:{laps: lapList}});
答案 3 :(得分:0)
对象没有推送方法,它们在如何循环它们方面确实有相似之处,但有时会引起混淆。当您使用新属性扩展对象时,它就是这样,您可以在对象上声明属性。像这样的东西
//objects value is {prop1: "value1"}
var obj = {prop1: "value1"}
//objects value is now {prop1: "value1", prop2: "value2"}
obj.prop2 = "value2"
我觉得你可能会在这里使用错误的结构,但是你想要完成的是什么。如果您发布了最终数据结构的示例,那么您期望我们可以更好地为您提供帮助。
答案 4 :(得分:0)
当通过Firefox的控制台放置此代码时,我收到类似的错误:TypeError: activeSet.push is not a function
。啊!有问题! Object
对象没有.push()
方法。当你做这个时,你可能已经处于阵列激光聚焦模式;)。 Array的.push()
方法的概念是向数组添加名称非特定值。这不是Object的方法之一,因为任何给定对象的每个值都必须具有(有意义的)名称;将一个非命名值放入一个对象中,好吧,混淆了这个可怜的东西。相反,尝试:
activeSet.reps = [{laps: lapList}];
而且,当我再次通过控制台时......
"good"
Array [ Object, Object ]
"also good"
Array [ Object, Object ]
瞧!希望它有所帮助!