首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javascript中将类似职业的人移动到新创建的对象(结果)中

如何在javascript中将类似职业的人移动到新创建的对象(结果)中
EN

Stack Overflow用户
提问于 2022-08-27 06:55:10
回答 4查看 33关注 0票数 -1

我有一个快速的问题,我想把所有类似的专业人员转移到一个新创建的对象(结果)中,我已经编写了代码,但是所有的值都没有被移动。

代码语言:javascript
复制
const data = [
    {
        Name: 'Smith',
        age: 25,
        profession: 'Banker'
    },
    {
        Name: 'Alex',
        age: 28,
        profession: 'IT'
    },
    {
        Name: 'John',
        age: 31,
        profession: 'Banker'
    },
    {
        Name: 'Harry',
        age: 26,
        profession: 'Nurse'
    },
];
const result = {};

我的密码在这里..。

代码语言:javascript
复制
const data = [ { Name: "Smith", age: 25, profession: "Banker" }, { Name: "Alex", age: 28, profession: "IT" }, { Name: "John", age: 31, profession: "Banker" }, { Name: "Harry", age: 26, profession: "Nurse" } ];

const result = {};
data.forEach(({ Name, age, profession }) => {
  result[profession] = { Name, age };
});
console.log(result);

CodePen:https://codepen.io/Sandy4405/pen/wvmLaJX

EN

回答 4

Stack Overflow用户

发布于 2022-08-27 07:03:42

在我上面的评论中,您的forEach内部应该是:

代码语言:javascript
复制
data.forEach(({ Name, age, profession }) => {
    if (Array.isArray(result[profession])) {
        result[profession].push({ Name, age })
    } else {
        result[profession] = [{ Name, age }]
    }
});
票数 0
EN

Stack Overflow用户

发布于 2022-08-27 07:07:50

您需要创建一个nested JSON,这意味着类似行业的对象数组。在迭代时,为每个行业创建一个数组,并使用.push()添加对象。代码如下所示

代码语言:javascript
复制
data.forEach(({Name,age,profession}) => {
  result[profession] = result[profession] || [];
  result[profession].push({Name,age});
});

工作版本:

代码语言:javascript
复制
const data = [{
    Name: "Smith",
    age: 25,
    profession: "Banker"
  },
  {
    Name: "Alex",
    age: 28,
    profession: "IT"
  },
  {
    Name: "John",
    age: 31,
    profession: "Banker"
  },
  {
    Name: "Harry",
    age: 26,
    profession: "Nurse"
  }
];
const result = {};
data.forEach(({
  Name,
  age,
  profession
}) => {
  result[profession] = result[profession] || [];
  result[profession].push({
    Name,
    age
  });
});
console.log(result);

票数 0
EN

Stack Overflow用户

发布于 2022-08-27 07:10:05

在遇到第一个具有某一职业的人之后,随后每一个具有相同职业的人都会覆盖前一个职业。相反,您应该创建一个数组,并将每个具有相同职业的人推入该数组。

首先,我们将检查当前的职业是否曾经遇到过。如果没有,我们将创建一个空数组来容纳所有从事这一职业的人。

代码语言:javascript
复制
if (!(profession in result)) {
  result[profession] = []
}

然后,由于数组现在保证存在于这一行业,我们可以将当前的人推入我们的新数组。下次遇到这个职业时,我们的第一次检查将被跳过,我们将把下一个人推到数组上。

代码语言:javascript
复制
result[profession].push({
  Name,
  age
})

完整的例子:

代码语言:javascript
复制
const data = [{
  Name: "Smith",
  age: 25,
  profession: "Banker"
}, {
  Name: "Alex",
  age: 28,
  profession: "IT"
}, {
  Name: "John",
  age: 31,
  profession: "Banker"
}, {
  Name: "Harry",
  age: 26,
  profession: "Nurse"
}]

const result = {}

data.forEach(({
  Name,
  age,
  profession
}) => {
  if (!(profession in result))
    result[profession] = []

  result[profession].push({
    Name,
    age
  })
})
console.log(result)

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

https://stackoverflow.com/questions/73508967

复制
相关文章

相似问题

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