我有一个根据条件返回新对象的函数。为什么当我使用点符号时它会返回新对象,而扩展运算符则不会返回新对象
此行返回具有新属性的新对象
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
仅关心您传递给它的函数是否返回一个值(可以强制为)为 true
或 false
.
在这两种情况下,您都会返回一个对象。对象始终为真值,因此原始数组中的值保留在过滤后的数组中。
在第一个示例中,您返回的对象是您修改的原始对象。
在第二个示例中,您返回的对象是一个新对象,因此原始对象未修改。由于 filter
仅适用于 true
或 false
的情况,因此它始终返回原始对象(该对象只会有一个新的如果您修改原始版本,则其上的属性)。
您总是返回真值,并且从不返回假值,这使得使用filter
毫无意义。
关于javascript - 为什么点表示法返回具有添加属性的对象,而展开运算符则不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986569/