首页 > 解决方案 > 尝试创建对象字典时出现语法错误

问题描述

我从 API 获取一组对象,如下所示:

[
{
    jobId:100,
    jobName: "Java",
      cities:[
      {
           cityId:10,
           name : "chicago"
      },
      {
         statusId:11,
         name : "miami"
      }]
  },
  {
    jobId:101,
    jobName: "Python",
      cities:[
      {
           cityId:11,
           name : "california"
      },
      {
         cityId:12,
         name : "texas"
      }]
  }
]

我想访问特定工作的城市名称,如下所示:

var jobId = 101;
var cityId = 12;
var texas = jobDict[jobId].cityDict[cityId] // output: texas

代码:

angular.forEach(response.data, function (data) {
        if (jobsDict[data.jobId] == undefined) {
                jobsDict[data.jobId] = [];
        }
        angular.forEach(data.cities, function (city) {
                jobsDict[data.jobId].push({
                    cityDic[city.cityId]: city.name // syntax error here saying unexpected token
                   });
                });
            });

我正在尝试创建一个工作字典,并在工作字典中创建一个城市字典。

有人可以帮我解决问题并实现所需的输出吗?

标签: javascript

解决方案


也许是这样的:

const jobArray = [{
    jobId: 100,
    jobName: "Java",
    cities: [{
        cityId: 10,
        name: "chicago"
      },
      {
        cityId: 11,
        name: "miami"
      }
    ]
  },
  {
    jobId: 101,
    jobName: "Python",
    cities: [{
        cityId: 11,
        name: "california"
      },
      {
        cityId: 12,
        name: "texas"
      }
    ]
  }
];

function index_job_array_A(jobArray) {
  return jobArray.reduce(
    (acc, item) => Object.assign(acc, {
      [item.jobId]: Object.assign({}, item, {
        cities: item.cities.reduce(
          (acc, item) => Object.assign(acc, { [item.cityId]: item }),
          {}
        )
      })
    }),
    {}
  );
};

function index_job_array_B(jobArray) {
  let indexed_jobs = {};
  
  jobArray.forEach(function(job) {
    let indexed_cities = {};
    
    job.cities.forEach(function(city) {
      indexed_cities[city.cityId] = city;
    });
    
    indexed_jobs[job.jobId] = { ...job, cities: indexed_cities };
  });

  return indexed_jobs;
};

const jobDictA = index_job_array_A(jobArray);
const jobDictB = index_job_array_B(jobArray);

console.log(jobDictA['100'].cities['10']);
console.log(jobDictB['100'].cities['10']);


推荐阅读