在JavaScript中分解数组并创建新数组



我有一个数组,在每个作业对象中都有一个job数组。

我想把每个对象的name和同一个对象的jobTitle结合起来创建一个新对象,并把它放在newArray数组中。

我想对data中的所有对象都这样做。

不幸的是,在循环

中没有找到jobTitle为了进一步指导,我在下面列出了expected output:

谢谢你的帮助

const data = 
[ { id: 5
, name: "Emma"
, job: [ { jobTitle: "Teacher",    workExperience: 8 } ] 
} 
, { id: 5
, name: "Charlotte"
, job: [ { jobTitle: "programmer", workExperience: 3 } ] 
} 
, { id: 5
, name: "Amelia"
, job: [ { jobTitle: "Doctor",     workExperience: 5 } ] 
} ] 
const newArray = [];
data.forEach(item => {
newArray.push({
name: item.name,
jobTitle: item.job.forEach(item => item.jobTitle)
})
})
console.log(newArray);

Expected output:
[
{ name: 'Emma', jobTitle: "Teacher" }
{ name: 'Charlotte', jobTitle: "programmer" }
{ name: 'Amelia', jobTitle: "Doctor" }
]

foreach不返回任何东西,你正在寻找map():

jobTitle: item.job.map(item => item.jobTitle)

const data = [
{
id: 5,
name: "Emma",
job: [
{ jobTitle: "Teacher", workExperience: 8 }
]
}, {
id: 5,
name: "Charlotte",
job: [
{ jobTitle: "programmer", workExperience: 3 }
]
}, {
id: 5,
name: "Amelia",
job: [
{ jobTitle: "Doctor", workExperience: 5 }
]
},
]
const newArray = [];
data.forEach(item => {
newArray.push({
name: item.name,
jobTitle: item.job.map(item => item.jobTitle)
})
})
console.log(newArray);

{
"name": "Emma",
"jobTitle": [
"Teacher"
]
}

如果您想要一个字符串(如您的示例输出所示),我们可以join()数组:

jobTitle: item.job.map(item => item.jobTitle).join(' ');

const data = [
{
id: 5,
name: "Emma",
job: [
{ jobTitle: "Teacher", workExperience: 8 }
]
}, {
id: 5,
name: "Charlotte",
job: [
{ jobTitle: "programmer", workExperience: 3 }
]
}, {
id: 5,
name: "Amelia",
job: [
{ jobTitle: "Doctor", workExperience: 5 }
]
},
]
const newArray = [];
data.forEach(item => {
newArray.push({
name: item.name,
jobTitle: item.job.map(item => item.jobTitle).join(' ')
})
})
console.log(newArray);

{
"name": "Emma",
"jobTitle": "Teacher"
}

如果输入数据语法绝对正确,则可以直接从item访问它,而不需要另一个循环,假设总是有一个作业。

const data = [
{
id: 5,
name: "Emma",
job: [
{ jobTitle: "Teacher", workExperience: 8 }
]
}, {
id: 5,
name: "Charlotte",
job: [
{ jobTitle: "programmer", workExperience: 3 }
]
}, {
id: 5,
name: "Amelia",
job: [
{ jobTitle: "Doctor", workExperience: 5 }
]
},
]
const newArray = [];
data.forEach(item => {
newArray.push({
name: item.name,
jobTitle: item.job[0].jobTitle
})
})
console.log(newArray);

你就快成功了。forEach返回值为undefined。这就是你有问题的原因。由于jobTitle数组中只有一项,因此直接使用索引很容易实现。

const data = 
[ { id: 5
, name: "Emma"
, job: [ { jobTitle: "Teacher",    workExperience: 8 } ] 
} 
, { id: 5
, name: "Charlotte"
, job: [ { jobTitle: "programmer", workExperience: 3 } ] 
} 
, { id: 5
, name: "Amelia"
, job: [ { jobTitle: "Doctor",     workExperience: 5 } ] 
} ] 
const newArray = [];
data.forEach(item => {
newArray.push({
name: item.name,
jobTitle: item.job[0].jobTitle
})
})
console.log(newArray);

Array.forEach实际上不会像您期望的那样返回值,Array.map会返回值,但它不适用于您的情况。

看到预期的结果只有一个值,您可以做的一件事就是从User的作业列表中获取第一个值。

例如:

data.forEach(item => {
newArray.push({
name: item.name,
jobTitle: item.job[0].jobTitle
})
})

也可以这样做:

const newArray = data.map(item => {
return { name: item.name, jobTitle: item.job[0].jobTitle }
})

最新更新