【问题标题】:Creating named javascript objects in loop在循环中创建命名的 javascript 对象
【发布时间】:2015-10-03 17:59:36
【问题描述】:

我正在寻找这种类型的 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' } };

有什么办法解决这个问题吗?

【问题讨论】:

  • ` JSON.parse(JSON.stringify())` 是多余的。
  • 可能,但这不会有什么不同,不是吗?
  • 您能解释一下您要达到的目标吗?您在浏览器中所谓的“输出”与您的区域对象不一致。而且您的代码似乎试图创建完全不同格式的输出。
  • 别在意输出,它只是一种显示数据如何声明以及数据如何在浏览器中呈现的方式。问题是我如何以编程方式而不是声明方式创建相同类型的输出。

标签: javascript prototype


【解决方案1】:

你已经把事情复杂化了。您可以只使用对象文字表示法和括号表示法。

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

【讨论】:

  • 太好了,就是这样!所以我建议的解决方案并不像我想象的那么愚蠢。
  • 是的,你非常接近。使用变量作为键名时,您只需使用方括号 result[data[i].Country]
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 2012-07-23
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 2015-04-15
相关资源
最近更新 更多