D3 v4如何同步遍历数据

问题描述 投票:0回答:1

我有一个名为states的数组,它是一个数组数组。每个数组元素都有2个项目,一个美国州名及其缩写:

states = [
  ['Arizona', 'AZ'],
  ['Alabama', 'AL'],
  ['Alaska', 'AK'],
  ['Arkansas', 'AR'],
  ['California', 'CA'],
  ...
  ]

我有一个名为statesData的映射,键=状态的缩写。我正在尝试使用states数组创建一个具有与statesData相同值的新地图,但键等于该州的全名:

function setStatesFullData(statesFullData, statesData) {
  statesData.each(function(key, value) {
    states.forEach(function(element) {
      if (key == element[1]) {
        statesFullData.set(element[0], value);
      }
    })
  })
  console.log(statesFullData.size());
  return statesFullData;
}


var statesFullData = d3.map();
statesFullData = setStatesFullData(statesFullData, statesData);

输出:

0

由于可变范围和(我相信)map.eacharray.forEach是异步函数,因此可以预期。

我目前不了解如何解决:必须在statesData.forEach函数外部使用数据,否则数据将不存在。

我认为我缺少异步开发方面的东西。

我可以根据要求提供更多信息。谢谢!

javascript dictionary asynchronous d3.js callback
1个回答
0
投票

我没有做最后一部分(转换为d3.map(),但是如果需要的话,我可能可以。

我休息了(演示:https://codepen.io/Alexander9111/pen/YzXNGyZ):

enter image description here

const states = [
  ['Arizona', 'AZ'],
  ['Alabama', 'AL'],
  ['Alaska', 'AK'],
  ['Arkansas', 'AR'],
  ['California', 'CA']
];

const statesReversed = states.map((child, index) =>{
  return [...child.reverse()]
});

console.log(statesReversed);
const statesConversionObject = Object.fromEntries(statesReversed);
console.log(statesConversionObject);

const statesData = {
  'AZ': ['Some', 'Data'],
  'AL': ['Some', 'Data'],
  'AK': ['Some', 'Data'],
  'AR': ['Some', 'Data'],
  'CA': ['Some', 'Data']
};

const statesDataModified = {};

for (let key in statesData){
  const newKey = statesConversionObject[key];
  statesDataModified[newKey] = statesData[key];
}

console.log(statesDataModified);
© www.soinside.com 2019 - 2024. All rights reserved.