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


72

我正在努力推动

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

作为新的ID和json字符串的值。但它给出了以下错误

Uncaught TypeError: data.push is not a function

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

提前谢谢您的回复


17
因为data不是Array。如果是object,只需设置date.country = 'IN'。如果它是“ JSON字符串”,则最好先对其进行反序列化。
haim770

5
data.country = 'IN'
阿伦·P·约翰尼

1
确保不执行“ data = data.push(...)”。这也会导致上述错误。
Joshua Kissoon

Answers:


113

要使用Array的push函数,您的var必须是一个Array。

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

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

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

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

..

包含的数组项将是typeof对象,您可以执行以下操作:

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

注意:请保持一致。在我的示例中,一个数组包含对象属性nameage而另一个仅包含对象属性country。如果我使用for或进行迭代,forEach那么我将无法始终检查一个属性,因为我的示例包含了变化的项目。

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

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

编辑

很酷的事情要知道:

var array = new Array();

类似于:

var array = [];

也:

var object = new Object();

类似于:

var object = {};

您还可以将它们结合起来:

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

15

您的data变量包含一个对象,而不是一个数组,并且对象不具有push作为错误状态的功能。要执行您需要的操作,可以执行以下操作:

data.country = 'IN';

要么

data['country'] = 'IN';

假设我将国家/地区作为变量,并且希望传递变量值,那么我该如何实现?
严厉的帕特尔

@HarshPatel使用括号表示法的第二个示例可以处理变量:var propertyName = 'country'; data[propertyName] = 'IN';
Rory McCrossan

9

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

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

替换为:

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

可以正常工作。


7

仅当对象是数组时才可以使用push方法:

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

要么

data['country'] = "IN"

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

data.country = "IN";

5

我认为您将其设置为

var data = []; 

但一段时间后,您将其设置为:

data = 'some thing which is not an array'; 

那么 data.push('')它将不再起作用,因为它不再是数组。


2

试试下面的代码$ 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);

2

确保仅入一个数组,并且如果它们是错误的,例如Uncaught TypeError:data.push不是函数**,然后检查数据类型, 可以通过consol.log(data)做到这一点, 希望对您有所帮助


2

需要记住的一件事是,仅使用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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.