【发布时间】:2021-06-06 15:37:57
【问题描述】:
从graphql获取数据,例子:
const data = [
{
items: [
{
link: '/monday',
name: 'Monday',
},
{
link: '/tuesday',
name: 'Tuesday',
},
{
link: '/wednesday',
name: 'Wednesday',
},
],
},
{
items: [
{
link: '/january',
name: 'January',
},
{
link: '/february',
name: 'February',
},
{
link: '/march',
name: 'March',
},
],
},
]
我正在尝试构建一个新对象并添加一个唯一的id,但我需要两个循环才能完成(还包括预期的输出):
const data = [
{
items: [
{
link: '/monday',
name: 'Monday',
},
{
link: '/tuesday',
name: 'Tuesday',
},
{
link: '/wednesday',
name: 'Wednesday',
},
],
},
{
items: [
{
link: '/january',
name: 'January',
},
{
link: '/february',
name: 'February',
},
{
link: '/march',
name: 'March',
},
],
},
]
let itemsObj = []
let merge = []
data.forEach(section => {
section.items.forEach((item, i) => {
return (itemsObj = [...itemsObj, item])
})
})
itemsObj.map((item, i) => {
item.id = i
return merge.push(item)
})
console.log(itemsObj)
正确构建我需要但需要 foreach 和 map 的代码:
data.forEach(section => {
section.items.forEach((item, i) => {
return (itemsObj = [...itemsObj, item])
})
})
itemsObj.map((item, i) => {
item.id = i
return merge.push(item)
})
当我尝试在一个循环中添加递增的id 时,它会重新开始,例如:
const data = [
{
items: [
{
link: '/monday',
name: 'Monday',
},
{
link: '/tuesday',
name: 'Tuesday',
},
{
link: '/wednesday',
name: 'Wednesday',
},
],
},
{
items: [
{
link: '/january',
name: 'January',
},
{
link: '/february',
name: 'February',
},
{
link: '/march',
name: 'March',
},
],
},
]
let itemsObj = []
data.forEach(section => {
section.items.forEach((item, i) => {
item.id = i
return (itemsObj = [...itemsObj, item])
})
})
console.log(itemsObj)
代码尝试添加 id 并在一个循环中构建对象,导致 id 重新开始:
let itemsObj = []
data.forEach(section => {
section.items.forEach((item, i) => {
item.id = i
return (itemsObj = [...itemsObj, item])
})
})
console.log(itemsObj)
根据answer 相同的问题出现在不唯一的id 上:
data.flatMap(dataObj => {
return dataObj.items.map((item, i) => {
return { i, ...item }
})
})
预期的输出示例以澄清评论:
[
{
"link": "/monday",
"name": "Monday",
"id": 0
},
{
"link": "/tuesday",
"name": "Tuesday",
"id": 1
},
{
"link": "/wednesday",
"name": "Wednesday",
"id": 2
},
{
"link": "/january",
"name": "January",
"id": 3
},
{
"link": "/february",
"name": "February",
"id": 4
},
{
"link": "/march",
"name": "March",
"id": 5
}
]
研究:
- Add id to array of objects
- Add an incrementing ID property to each object in array after it has been submitted
- Nodejs how to put multiple id's into an if
- Find object by id in an array of JavaScript objects
有没有办法在一个循环中使用id 而不是使用foreach 和map?
【问题讨论】:
-
你的预期输出是什么?
-
@decpk 上面运行的例子有一个
foreach和map循环? -
一个循环是什么意思,因为在第二个代码块中您仍在使用嵌套循环。
-
使用代码 sn-ps 编辑的问题。
标签: javascript node.js