javascript - JS 中的 [{}].concat() 是做什么的?

标签 javascript reactjs

我知道这是我可以查找的东西,但我不知道它叫什么,更不用说要搜索什么了。最好能有指点!

一些背景知识,我们正在从 API 中获取一组对象并将它们保存在一个状态变量“notes”中,该变量被传递到下面的函数中。

代码如下:

function renderNotesList(notes) {
  return [{}].concat(notes).map((note, i) =>
    i !== 0 ? (
      // Do something
    ) : (
      // Do something else
  )
}

我将上面的代码简化为

function renderNotesList(notes) {
        console.log([{}].concat(notes))
    }

这是函数运行前后开发工具控制台的输出

0: Object { id: "1", note_text: "I am the first test note" }
​
1: Object { id: "2", note_text: "I am a new test note" }
​
length: 2

之后

0: Object {  }
​
1: Object { id: "1", note_text: "I am the first test note" }
​
2: Object { id: "2", note_text: "I am a new test note" }
​
length: 3

我不明白为什么 tutorial正在做这个。似乎 [{}].concat(notes) 只是添加了一个额外的空对象?

我看过https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat但它似乎没有与此类似的东西。或者至少,我不知道哪一部分是相关的。

最佳答案

你是对的 [{}] 确实只是创建了一个包含空对象的数组,所以 [{}].concat(notes) 将创建一个带有空对象的数组,之后是 notes 数组的内容。

这是故意的,因为代码随后会通过 .map 更改每个元素.然而,它使用了特殊的逻辑,其中所有的 notes 元素都将被用来显示它们的信息,而第一个元素将是一个带有文本“创建新笔记”的链接,点击它会添加另一个笔记.

第一项是什么并不重要,检查是根据索引 i !== 0 完成的,它将执行 第一个 代码分支注意(任何不是第一个元素的东西`和第二个代码分支只针对第一个元素(空对象)。

关于javascript - JS 中的 [{}].concat() 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59556192/

相关文章:

php - onclick 添加 1 到计数器 + 存储到服务器

php - 在 HighCharts 中单击饼图的图例时显示工具提示并选择饼图切片

javascript - d3 直方图和条形图数据

javascript - 从对象数组创建单个对象 - JS/ES6

reactjs - useCallback 和 useMemo 在实践中有何区别?

javascript - 内容现在可见时如何将类添加到下拉窗口?

javascript - 从 forEach javascript 返回

reactjs - 如何允许在 Windows 机器中从同一源代码安装两个不同的可执行文件

javascript - react : unnecessary component update

reactjs - 如何使用带有 typescript 的 Ant 设计表单正确验证和提交表单是否有效