te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Using spread operator when the value is null - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Using spread operator when the value is null - Stack Overflow

programmeradmin1浏览0评论

Is there a way to handle null in spread operator, without specifying if and else?

In following scenario, I want to spread assignedStudents only when it's not undefined.

If I do it without using if else, I get the error:

TypeError: Invalid attempt to spread non-iterable instance

To handle this, I am using if else, but thinking there is a better/elegant way of doing this.

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

Is there a way to handle null in spread operator, without specifying if and else?

In following scenario, I want to spread assignedStudents only when it's not undefined.

If I do it without using if else, I get the error:

TypeError: Invalid attempt to spread non-iterable instance

To handle this, I am using if else, but thinking there is a better/elegant way of doing this.

let questions;
if (assignedStudents) {
    questions = [
        ...assignedStudents,
        {
            questionId: randomId,
            question: ''
        }
    ];
} else {
    questions = [
        {
            questionId: randomId,
            question: ''
        }
    ];
}
Share Improve this question asked Oct 13, 2020 at 4:46 SimsonsSimsons 12.7k49 gold badges159 silver badges283 bronze badges 2
  • 3 You can initialise assignedStundents to an empty array, for example. – VLAZ Commented Oct 13, 2020 at 4:49
  • ECMASrcipt2020 has the null coalesce operator (??) which checks for null and undefined and returns the right hand operator if that is the case. you may check that out – ritesh sangani Commented Oct 13, 2020 at 6:32
Add a ment  | 

3 Answers 3

Reset to default 17

Do you mean something like this using the nullish coalescing operator

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

Of course, this won't protect you if assignedStudents is non-iterable (like a Number or Object). It's not as fancy but if you only want to act on an array, check it with Array.isArray()

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

Since you've tagged this question with typescript, you should be marking assignedStudents as a nullable array, eg

assignedStudents?: Something[]

in which case the above isn't a problem any more.

There are so many ways to do it.

Your current approach has a flaw, let's say when assignedStudents is not nullish but non-iterable, you will still get an error.

Example, assignedStudents is -1, if-statement will go through and it will be an error.

The safest way should be to check if assignedStudents is an array, if it is not, then spread an empty array.

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

you may use this expression [...(this.options || [])], where options is array

发布评论

评论列表(0)

  1. 暂无评论