【问题标题】:Error with spread operation in array. TS1005: ',' expected. TypeScript数组中的展开操作出错。 TS1005:“,”预期。打字稿
【发布时间】:2019-05-09 11:38:25
【问题描述】:

我无法弄清楚我在row.sections[SECTION_ID 线上错过了什么。它总是向我显示一个拼写错误','......

常见问题解答:sections - 是一个包含objects 的数组。在这种情况下,我 尝试修改自定义创建的部分的特定对象 标记 SECTION_ID。

附言

我还尝试将row.sections[SECTION_ID] 放在一个额外的括号[] 内,但不幸的是它没有帮助......有什么解决方案吗?

  rows: state.rows.map(
    row =>
      row.ID === action.rowID
        ? {
            ...row,
            sections: [
              ...row.sections,
              row.sections[SECTION_ID]: { // error is here
                ...row.sections[SECTION_ID],
                data: {
                  ...// some data
                }
              }
            ]
          }
        : row
  )

【问题讨论】:

  • section 是数组还是对象?它是用方括号编写的,使其成为一个数组,但随后您尝试将键/值对像对象一样放入其中。
  • @NicholasTower 嗨! sections 是一个包含对象的数组,是的。在这种情况下,我尝试通过自定义标志 SECTION_ID 修改 sections 的特定对象以在数组中找到它
  • 好的,那么您是想将一个对象推到数组的末尾,还是替换某个索引处的对象?
  • 很难说你想在这里得到什么输出。 sections 数组中的第二个元素应该是一个对象吗?
  • @KirkLarkin 嗨! sections 的所有元素都是objects

标签: javascript arrays reactjs typescript spread-syntax


【解决方案1】:

您不能以这种方式通过spread 操作在array 中改变一些element。使用这种方法,您只需将一个新的、变异的element 每次都添加到相同的array 中。所以,如果你想让它正确,你需要使用 map 迭代器来代替:

rows: state.mymaps.rows.map(
    row =>
      row.ID === action.rowID
        ? {
            ...row,
            sections: row.sections.map(
              (section, index) =>
                index === JOIN_SECTION_ID
                  ? {
                      ...section,
                      data: {
                        ...section.data
                      }
                   } : section
             )
          } : row
)

【讨论】:

    【解决方案2】:

    如果您尝试在不改变数组的情况下替换数组某个索引处的元素,您可以制作数组的浅表副本,然后在该索引处设置值。例如:

    state.rows.map((row) => {
      if (rowID !== action.rowID) {
        return row;
      }
      const sectionCopy = [...row.sections];
      sectionCopy[SECTION_ID] = {
        ...row.sections[SECTION_ID],
        data: {
          // some data
        },
      };
      return {
        ...row,
        sections: sectionCopy,
      };
    });
    

    【讨论】:

    • 谢谢,我在我的问题帖子中也做了同样的技巧,但它不能通过三元运算符工作,这就是为什么......
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2013-08-20
    • 2018-03-06
    • 2016-01-11
    • 2020-04-13
    • 2018-05-14
    • 2017-06-12
    相关资源
    最近更新 更多