创建具有toString函数的javascript对象数组
我有一个javascript对象数组,类型如下:创建具有toString函数的javascript对象数组,javascript,arrays,ajax,object,Javascript,Arrays,Ajax,Object,我有一个javascript对象数组,类型如下: var tags = [ { id: 0, toString: function() { return 'jQuery'; } }, { id: 1, toString: function() { return 'Python'; } }, ]; 我有一个包含大约100个对象的json。如何动态创建标记数组。我尝试了下面的方法,但没有成功 var tags = []; $.ajax
var tags = [
{ id: 0, toString: function() { return 'jQuery'; } },
{ id: 1, toString: function() { return 'Python'; } },
];
我有一个包含大约100个对象的json。如何动态创建标记
数组。我尝试了下面的方法,但没有成功
var tags = [];
$.ajax({
url: baseurl,
dataType: 'json',
data: {
"stime": stime // some variable
},
type: "POST",
success: function(_data){
if (_data.length>0) {
for (var i=0; i<_data.length; i++) {
var _x = { id: _data[i].id, toString: function() { return ''+_data[i].name; } }
tags.push(_x);
}
var标记=[];
$.ajax({
url:baseurl,
数据类型:“json”,
数据:{
“stime”:stime//某个变量
},
类型:“POST”,
成功:函数(_数据){
如果(_data.length>0){
对于(var i=0;i您在toString函数中使用i。这意味着所有对象将访问同一项,i超出范围
你可以用bind代替
toString: function(name) { return name; }.bind(this, _data[i].name)
编辑
澄清一下,我是成功闭包的一部分。这意味着当调用toString时,我将从成功闭包中取出,然后使用_数据,然后使用_数据[i]。
这意味着这些函数将共享相同的i
另外,_data.ids[i]似乎是错误的。它不应该是_data[i].id吗?typo:vat tags=[];
应该是var
@user4760106你能把_data
放在一个粘贴箱里吗?@freedenson:那么,对不起。发布这个问题时是一个输入错误。我建议使用单个函数,例如function getName(){返回this.name;}
,将其分配给所有对象,并为这些对象指定一个名称
属性:var\u x={id:\u data[i].id,name:\u data[i].name,toString:getName};
。谢谢。您的解决方案成功了。