gpt4 book ai didi

Javascript:for循环中的 map 总是返回最后一项

转载 作者:行者123 更新时间:2023-12-01 00:09:29 25 4
gpt4 key购买 nike

我正在尝试修改对象数组,并在 for 循环内使用映射。我的实现似乎总是返回 map 中的最后一项。

代码:

let testArray = [
{
body: 'test sentence',
uid: "a"
},
{
body: 'Another test sentence',
uid: "b"
}
]

var allItems = []
for (var item of testArray) {
let splittedBody = item.body.split(' ')

let splittedArray = splittedBody.map((word, i) => {
item.body = word
item.objectID = `${item.uid}:${i}`
return item
})
allItems.push(splittedArray)
}

allItems = Array.prototype.concat(...allItems)
console.log(allItems)

上面的代码打印以下内容:

[ { body: 'sentence', uid: 'a', objectID: 'a:1' },
{ body: 'sentence', uid: 'a', objectID: 'a:1' },
{ body: 'sentence', uid: 'b', objectID: 'b:2' },
{ body: 'sentence', uid: 'b', objectID: 'b:2' },
{ body: 'sentence', uid: 'b', objectID: 'b:2' } ]

我想要的是:

[ { body: 'test', uid: 'a', objectID: 'a:0' },
{ body: 'sentence', uid: 'a', objectID: 'a:1' },
{ body: 'Another', uid: 'b', objectID: 'b:0' },
{ body: 'test', uid: 'b', objectID: 'b:1' },
{ body: 'sentence', uid: 'b', objectID: 'b:2' } ]

编辑:理想情况下,我不想在映射函数中构造另一个项目,因为 testArray 中的每个对象可能具有其他对象中不存在的属性。在 map 函数中构造另一个项目意味着我必须检查这些属性中的 undefined ,这很容易出错。

最佳答案

您的问题来自于您对 item 所做的阴影:

let testArray = [{
body: 'test sentence',
uid: "a"
},
{
body: 'Another test sentence',
uid: "b"
}
]

var allItems = []
for (var item of testArray) {
let splittedBody = item.body.split(' ')

let splittedArray = splittedBody.map((word, i) => {

// Create a clone of item -> don't use item
var itemClone = JSON.parse(JSON.stringify(item));

itemClone.body = word
itemClone.objectID = `${item.uid}:${i}`
return itemClone // <-- return the modified clone
})
allItems.push(splittedArray)
}

allItems = Array.prototype.concat(...allItems)
console.log(allItems)

item 在 for 循环中声明:

for (var item of testArray) {

但是你实际上修改了正文和其中的 objectID:

    let splittedArray = splittedBody.map((word, i) => {
item.body = word
item.objectID = `${item.uid}:${i}`

关于Javascript:for循环中的 map 总是返回最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60168993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com