首页 > 解决方案 > 当值为空时使用扩展运算符

问题描述

有没有办法在扩展运算符中处理 null,而不指定 if 和 else?

在以下情况下,我只想在assignedStudents未定义时传播。

如果我在不使用 if else 的情况下执行此操作,则会收到错误消息:

TypeError:传播不可迭代实例的无效尝试

为了处理这个问题,我正在使用 if else,但认为有更好/优雅的方式来做到这一点。

let questions;
if (assignedStudents) {
    questions = [
        ...assignedStudents,
        {
            questionId: randomId,
            question: ''
        }
    ];
} else {
    questions = [
        {
            questionId: randomId,
            question: ''
        }
    ];
}

标签: javascriptreactjstypescriptecmascript-6

解决方案


你的意思是这样的使用无效合并运算符

const questions = [
  ...(assignedStudents ?? []),
  {
    questionId: randomId,
    question: ""
  }
]

当然,如果assignedStudents是不可迭代的(如 aNumberObject),这不会保护你。它没有那么花哨,但是如果您只想对数组进行操作,请使用Array.isArray()

const questions = [
  ...(Array.isArray(assignedStudents) ? assignedStudents : []),
  {
    questionId: randomId,
    question: ""
  }
]

由于您已使用标记此问题,因此您应该将其标记assignedStudents为可为空的数组,例如

assignedStudents?: Something[]

在这种情况下,上述问题不再是问题。


推荐阅读