有条件的传播元素

Lir*_*Yeo 6 javascript ternary-operator ecmascript-6

const cond = false

const extraInfo = [
  {
    a: 11,
    b: 25
  },
  {
    a: 12,
    b: 34
  },
  {
    a: 1,
    c: 99
  }
]

const userInfo = [
  {
    z: 8
  },
  {
    z: 10
  },
  ...(cond && extraInfo)
]
Run Code Online (Sandbox Code Playgroud)

什么时候cond是真的,我想要额外的和用户信息.

如果cond为false,则仅需要userInfo.

问题是什么时候cond是假的,我明白了

TypeError :(中间值)(中间值)(中间值)[Symbol.iterator]不是函数

我的理解是,在这种情况下,我不允许使用布尔值作为扩展元素...false.

但...( cond ? extraInfo : {} )似乎也没有用.

到底是怎么回事?

gur*_*372 29

做吧

...(cond ? extraInfo : [])
Run Code Online (Sandbox Code Playgroud)

演示真实

var cond = true;

var extraInfo = [
  {
    a: 11,
    b: 25
  },
  {
    a: 12,
    b: 34
  },
  {
    a: 1,
    c: 99
  }
];

var userInfo = [
  {
    z: 8
  },
  {
    z: 10
  },
  ...(cond ? extraInfo : [])
];

console.log( userInfo );
Run Code Online (Sandbox Code Playgroud)

用虚假演示

var cond = false;

var extraInfo = [
  {
    a: 11,
    b: 25
  },
  {
    a: 12,
    b: 34
  },
  {
    a: 1,
    c: 99
  }
];

var userInfo = [
  {
    z: 8
  },
  {
    z: 10
  },
  ...(cond ? extraInfo : [])
];

console.log( userInfo );
Run Code Online (Sandbox Code Playgroud)

  • @AswinRamesh 不,不要那样做。它更长,更令人困惑,并且仅当“extraInfo”为真时才有效。 (2认同)

Pur*_*lex 17

有条件地将实体传播到对象

console.log(
  { 
    name: 'Alex',
    age: 19,
    ...(true && { city: 'Kyiv' }),
    ...(false && { country: 'Ukraine' })
  }
) 

// { name: 'Alex', age: 19, city: 'Kyiv' }

Run Code Online (Sandbox Code Playgroud)

有条件地将实体传播到Array


console.log(
  [
    'Dan',
    'Alex',
    ...(true ? ['Robin'] : [])
  ]
)

// [ 'Dan', 'Alex', 'Robin' ]

Run Code Online (Sandbox Code Playgroud)

  • 我不知道这可以做到。在某些用例中非常简洁。好的! (2认同)