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

标签 javascript

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

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


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/

相关文章:

javascript - JavaScript中同时调用函数和修改变量

javascript - 在 Javascript 中使用交集公式创建生命之花

JavaScript 表单提交在 Firefox 中不起作用

javascript - 如何在 Express 中代理外部站点

Javascript 部分(Ruby on Rails)

javascript - 如何使用 JSON 中的 Parse.Object?

asp.net - 使用 Javascript 从标签复制文本

javascript - D3.js 未在 HTML 中附加更新的树

javascript - 使用 GruntJS 将 CSS 和 JS 文件嵌入到 HTML 中?

javascript - Uncaught TypeError : n. apply is not a function - 可能是什么问题?