未捕获的TypeError:data.push不是函数

时间:2015-04-17 10:22:59

标签: javascript jquery json

我正在尝试推送

data.push({"country": "IN"});

作为json字符串的新id和值。但它会出现以下错误

Uncaught TypeError: data.push is not a function

data{"name":"ananta","age":"15"}

预先感谢您的回复

8 个答案:

答案 0 :(得分:76)

要使用数组的推送功能,你的var必须是一个数组。

data{"name":"ananta","age":"15"}更改为以下内容:

var data = [
    { 
        "name": "ananta",
        "age": "15",
        "country": "Atlanta"
    }
];

data.push({"name": "Tony Montana", "age": "99"});

data.push({"country": "IN"});

..

包含的Array Items将是typeof Object,您可以执行以下操作:

var text = "You are " + data[0]->age + " old and come from " + data[0]->country;

注意:尽量保持一致。在我的示例中,一个数组包含对象属性nameage,而另一个数组仅包含country。如果我使用forforEach进行迭代,那么我不能总是检查一个属性,因为我的示例包含更改的项目。

完美将是:data.push({ "name": "Max", "age": "5", "country": "Anywhere" } );

因此,您可以迭代并始终​​获取属性,即使它们为空,null或未定义。

修改

很酷的东西要知道:

var array = new Array();

类似于:

var array = [];

此外:

var object = new Object();

类似于:

var object = {};

你也可以将它们结合起来:

var objectArray = [{}, {}, {}];

答案 1 :(得分:9)

您的data变量包含一个对象,而不是一个数组,并且对象没有push函数作为错误状态。要做你需要的,你可以这样做:

data.country = 'IN';

或者

data['country'] = 'IN';

答案 2 :(得分:5)

只有当对象是数组时才能使用push方法:

var data = new Array();
data.push({"country": "IN"}).

OR

data['country'] = "IN"

如果它只是一个对象,你可以使用

data.country = "IN";

答案 3 :(得分:5)

还要确保变量的名称不是某种语言关键字。 例如,以下内容会产生相同类型的错误:

var history = [];
history.push("what a mess");

替换为:

var history123 = [];
history123.push("pray for a better language");

按预期工作。

答案 4 :(得分:1)

试用此代码$ scope.DSRListGrid.data = data;这一个用于源数据

            for (var prop in data[0]) {
                if (data[0].hasOwnProperty(prop)) {
                    $scope.ListColumns.push(
                            {
                                "name": prop,
                                "field": prop,
                                "width": 150,
                                "headerCellClass": 'font-12'
                            }
                    );
                }
            }
            console.log($scope.ListColumns);

答案 5 :(得分:1)

确保仅推送到数组中 如果它们是未捕获的TypeError错误:data.push 不是函数** 然后检查数据的类型 你可以通过 consol.log(数据)来做到这一点 希望这会有所帮助

答案 6 :(得分:1)

要记住的一件事是推操作仅适用于array []而不适用于object {}。

如果要在n内部添加Like对象o

a={ b:"c",
D:"e",
F: {g:"h",
I:"j",
k:{ l:"m"
}}
}

a.F.k.n = { o: "p" };
a.F.k.n = { o: "p" };
console.log(a);

答案 7 :(得分:0)

  

我想您设置了

var data = []; 

但是有些时候你成功了

data = 'some things'; 

然后 data.push('')不起作用。