Add elements inside Array conditionally in JavaScript

后端 未结 3 631
日久生厌
日久生厌 2020-12-08 13:37

When I try to merge two objects using the spread operator conditionally, it works when the condition is true or false:

let conditio         


        
3条回答
  •  情歌与酒
    2020-12-08 14:03

    When you spread into an array, you call the Symbol.iterator method on the object. && evaluates to the first falsey value (or the last truthy value, if all are truthy), so

    let arr2 = ['value2', ...(condition && arr)];
    

    results in

    let arr2 = ['value2', ...(false)];
    

    But false does not have a Symbol.iterator method.

    You could use the conditional operator instead, and spread an empty array if the condition is false:

    let condition = false;
    let arr1 = ['value1'];
    let arr2 = ['value2', ...(condition ? arr1 : [])];
    console.log(arr2);

    (This works because the empty array does have the Symbol.iterator method)

    Object spread is completely different: it copies own enumerable properties from a provided object onto a new object. false does not have any own enumerable properties, so nothing gets copied.

提交回复
热议问题