首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在尝试创建对象字典时获取语法错误

问在尝试创建对象字典时获取语法错误
EN

Stack Overflow用户
提问于 2021-03-16 20:37:36
回答 2查看 84关注 0票数 2

我从API中获得了一个对象数组,如下所示:

代码语言:javascript
复制
[
{
    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"
      }]
  }
]

我想获得一个特定职位的城市名称如下:

代码语言:javascript
复制
var jobId = 101;
var cityId = 12;
var texas = jobDict[jobId].cityDict[cityId] // output: texas

代码:

代码语言:javascript
复制
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
                   });
                });
            });

我正在努力创建一本就业词典和一本就业词典,一本城市词典。

有人能帮我解决这个问题并达到预期的输出吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-16 20:45:14

您的jobsDict是一个数组,因此使用基于0的索引,而不是jobID键.

同样,对于嵌套的cities也是如此。

​

代码语言:javascript
复制
let jobDict = [{
  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"
  }]
}];

let jobId = 101;
let cityId = 12;
let texas =
  jobDict.find(job => job.jobId === jobId)
  .cities.find(city => city.cityId === cityId)
  .name;

console.log(texas);

​

根据您的评论,如果您真的关心性能(除非您有1000条条目,否则不应该这样做),下面介绍如何将原始结构转换为使用作业和城市ID作为键的“字典”结构:

​

代码语言:javascript
复制
let jobs = [{
    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"
    }]
}];

let jobsById = Object.fromEntries(jobs.map(({jobId, jobName, cities}) =>
        [jobId, {jobName, cities: Object.fromEntries(cities.map(({cityId, name}) => [cityId, name]))}]));

// Equivalent using traditional for loops.
let jobsById2 = {};
for (job of jobs) {
  let cities = {};
  for (city of job.cities)
    cities[city.cityId] = city.name;
  jobsById2[job.jobId] = {jobName: job.jobName, cities};
}

console.log(jobsById[101].cities[12]);
console.log(jobsById2[101].cities[12]);

​

票数 1
EN

Stack Overflow用户

发布于 2021-03-16 20:56:17

也许是这样:

​

代码语言: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']);

​

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

https://stackoverflow.com/questions/66663053

复制
相关文章

相似问题

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