gpt4 book ai didi

javascript - 为什么点表示法返回具有添加属性的对象,而展开运算符则不返回?

转载 作者:行者123 更新时间:2023-11-28 12:12:52 24 4
gpt4 key购买 nike

我有一个根据条件返回新对象的函数。为什么当我使用点符号时它会返回新对象,而扩展运算符则不会返回新对象

此行返回具有新属性的新对象


const newValue = values => {
const condition = "SUCCESS"

const result = values.filter(r => {
if(condition === "SUCCESS"){
r.codes = "Success Test"
return r
}
r.codes = "Fail Test"
return r
})

return result
}

此行返回不带新属性的旧对象


const newValue = values => {
const condition = "SUCCESS"

const result = values.filter(r => {
if(condition === "SUCCESS"){
return { ...r, codes: "Success Test" }
}
return { ...r, codes: "Fail Test" }
})

return result
}

预期结果应该是:

result = [{ name:"Hey", codes:"Success Test" }]

最佳答案

filter 仅关心您传递给它的函数是否返回一个值(可以强制为)为 truefalse .

在这两种情况下,您都会返回一个对象。对象始终为真值,因此原始数组中的值保留在过滤后的数组中。

在第一个示例中,您返回的对象是您修改的原始对象。

在第二个示例中,您返回的对象是一个新对象,因此原始对象未修改。由于 filter 仅适用于 truefalse 的情况,因此它始终返回原始对象(该对象只会有一个新的如果您修改原始版本,则其上的属性)。

<小时/>

总是返回真值,并且从不返回假值,这使得使用filter毫无意义。

看起来您正在尝试 map数组,而不是 filter它。

关于javascript - 为什么点表示法返回具有添加属性的对象,而展开运算符则不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986569/

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