首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字典追加到列表中?

如何将字典追加到列表中?
EN

Stack Overflow用户
提问于 2019-09-29 13:57:10
回答 1查看 28关注 0票数 0

我正在尝试创建一个for循环,它将值存储在一个字典中,并且每次迭代都将这个字典附加到一个列表中。

已尝试使用push()和索引列表进行附加,但未成功。

代码语言:javascript
复制
json = {
    "MUNICIPIOS":[
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [10, 100, 1000]},
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [20, 200, 2000]},
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [30, 300, 3000]},
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [40, 400, 4000]}
    ]
};

var atributos = json["MUNICIPIOS"][0]["ATRIBUTOS"];
var municipios = json["MUNICIPIOS"];
var dimensoes = [];
var dicionario = {label:"", values:[]};


for (var atr = 0; atr < atributos.length; atr++){

    dicionario.label = atributos[atr];

    valores = [];
    for (var mun=0; mun < municipios.length; mun++){
        valores.push(municipios[mun]["VALORES"][atr]);
        dicionario.values = valores;
    }

    //dimensoes.push(dicionario);
    dimensoes[atr] = dicionario;
}

console.log(dimensoes);

结果并不像我希望的那样:

代码语言:javascript
复制
// Actual result
[
  { label: 'atrib3', values: [ 1000, 2000, 3000, 4000 ] },
  { label: 'atrib3', values: [ 1000, 2000, 3000, 4000 ] },
  { label: 'atrib3', values: [ 1000, 2000, 3000, 4000 ] }
]

我需要这个:

代码语言:javascript
复制
// Expected result
[
  { label: 'atrib1', values: [ 10, 20, 30, 40 ] },
  { label: 'atrib2', values: [ 100, 200, 300, 400 ] },
  { label: 'atrib3', values: [ 1000, 2000, 3000, 4000 ] }
]

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-29 14:15:15

代码的问题在于您“填充”dicionario的位置--所有输出dimensoes[atr]都使用和修改了这个对象

代码语言:javascript
复制
var dicionario = {label:"", values:[]};

for (var atr = 0; atr < atributos.length; atr++){

    dicionario.label = atributos[atr];
    // snip - rest of your code
    dimensoes[atr] = dicionario;
}

一种解决方案是更改代码,以便每次迭代都有一个新的dicionario对象可用

代码语言:javascript
复制
var dicionario = {label:"", values:[]};

for (var atr = 0; atr < atributos.length; atr++){

    dicionario = {label:atributos[atr], values:[]};

    //dicionario.label = atributos[atr]; not required as it is set above
    // snip - rest of your code

    dimensoes[atr] = dicionario;
}

但是,对于整洁的ES6+解决方案:

代码语言:javascript
复制
const json = {
    "MUNICIPIOS":[
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [10, 100, 1000]},
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [20, 200, 2000]},
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [30, 300, 3000]},
        {"ATRIBUTOS":["atrib1","atrib2","atrib3"],"VALORES": [40, 400, 4000]}
    ]
};

const atributos = json.MUNICIPIOS[0].ATRIBUTOS;
const municipios = json.MUNICIPIOS;
const dimensoes = atributos.map((label, atr) => ({
  label,
  values: municipios.map(municipio => municipio.VALORES[atr])
}));
console.log(JSON.stringify(dimensoes, null, 4));

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58152666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档