将对象推送到对象上

时间:2014-12-03 01:04:49

标签: javascript arrays javascript-objects

我在将对象推到对象上时遇到问题。我成功地将一个数组推到了对象上,但我在前者失败了。

这就是我所拥有的

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不是一个函数。

有什么想法吗?

5 个答案:

答案 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 ]

瞧!希望它有所帮助!