在循环中创建命名的javascript对象

时间:2015-10-03 09:49:36

标签: javascript prototype

我正在寻找这种类型的javascript对象的解释:

var regions = {
        'Belgium': { tooltip: 'Test', attr: { fill: '#ff0000' } },
        'Netherlands': { tooltip: 'Test', attr: { fill: '#ff0000' } },
        'USA': { tooltip: 'Test', attr: { fill: '#ff0000' } },
        'United_Kingdom': { tooltip: 'Test', attr: { fill: '#ff0000' } },
        'Tanzania': { tooltip: 'Test', attr: { fill: '#ff0000' } },
        'Germany': { tooltip: 'Test', attr: { fill: '#ff0000' } },
        'France': { tooltip: 'Test', attr: { fill: '#ff0000' } },
        'Spain': { tooltip: 'Test', attr: { fill: '#ff0000' } }           
    };

可以在浏览器中生成这个,以及我如何以编程方式创建这样的对象:

  Netherlands: Object, 
  United_Kingdom: Object, 
> Tanzania: Object…
  > attr: Object
     fill: "#00ff11"         
  tooltip: "Test"     
> Australia: Object...
  > attr: Object
     fill: "#00ff11"         
  tooltip: "Test"     

我在这里尝试实现的是在浏览器中获得相同的结果但是具有动态的对象列表(因此没有声明性代码而不是上面的区域对象)。

目前我使用此方法但结果是一个字符串,这不是我需要的。此外,它是我想要摆脱的非常丑陋的代码:

function getRegions(data) {
        var arr = new Array();
        $.each(data, function (i, country) {

            var row = "'" + data[i].Country + "': { tooltip: 'Test', attr: { fill: '" + data[i].Color + "'} }";
            var parsedJson = JSON.parse(JSON.stringify(row));
            arr.push(parsedJson);
        });

        var result = JSON.parse(JSON.stringify('{ ' + arr + '}'));
        return result;
    }

我无法理解命名对象是如何被实例化的,以及如何在循环中以编程方式执行此操作而不事先知道实际名称。我需要一些这样的结构,但我怀疑这实际上会有效:

var data[i].Country = { tooltip: 'Test', attr: { fill: '#ff0000' } };

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

你已经过时了。您可以使用对象文字符号和括号表示法。

function getRegions(data) {
    var result = {};
    $.each(data, function (i, country) {
        result[data[i].Country] = {
            tooltip: 'Test',
            attr: {
                fill: data[i].Color
            }
        };
    });
    return result;
}