创建具有toString函数的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

我有一个javascript对象数组,类型如下:

    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};
。谢谢。您的解决方案成功了。