version 2
version 2

Reputation: 1059

angularjs: Push is not a function

I have a JSON object like this:

var post = {
    "post_id": "1",
    "content": "content",
    "post_author": {
        "id": "12",
        "firstName": "Amelia",
        "lastName": "Earheart",
    },
    "isLiked": false,
    "likes_count": 0,
    "likers": [],
    "comments_count": 0,
    "commenters": [],
    "comments": []
};

And post is passed to the function given below from the front end.

var vm = this;
vm.likePost = function(post) {
    var likedPost = post;
    vm.userInfo();
    likedPost.likers.push(userObject); //Here

    myService.postLike(likedPost).success(function(data) {
        likedPost.isLiked = true;
        likedPost.likes_count++;
        vm.posts = data;
    });
};

But doing so, I get a JavaScript error saying push is not a function in line likedPost.likers.push(userObject);

And userObject is returned by vm.userInfo() and it looks like this:

vm.userInfo = function() {
    myService.getBasicUserInfo().success(function(data) {
        vm.currentPost.post_author.id = data.id;
        vm.currentPost.post_author.firstName = data.firstName;
        vm.currentPost.post_author.lastName = data.lastName;
    });
};

and the returned JSON is like this:

{"id":"12","firstName":"Amelia","lastName":"Earheart"}

Can anyone help me figure out the cause of this issue?

UPDATE:

{
    "post_id": "12",
    "content": "Content is the content that contains the content",
    "image": "member-default.jpg",
    "created_at": "2016-05-26 14:29:00",
    "post_author": {
        "id": "12",
        "firstName": "Amelia",
        "lastName": "Earheart",
    },
    "isLiked": false,
}

This is what I get upon console.log(likedPost);

Upvotes: 3

Views: 17652

Answers (2)

Charlie
Charlie

Reputation: 23778

Your likedPost object doesn't have the likers array you expect. Probably you can see if that exists before trying to push.

if (typeof likedPost !== 'undefined')
   likedPost.likers.push(userObject);

Upvotes: 0

Satpal
Satpal

Reputation: 133403

The output clearly specifies that likers is not defined. You can put a validation check before using push() method.

//if likedPost.likers is not defined, it will define it as an array 
likedPost.likers = likedPost.likers || [];

//Do the push operation
likedPost.likers.push(userObject);

Upvotes: 7

Related Questions