条件传播元素
Conditional spread element
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)
]
当 cond
为真时,我需要额外信息和用户信息。
当cond
为false时,只需要userInfo。
问题是当 cond
为假时,我得到
TypeError: (intermediate value)(intermediate value)(intermediate value)[Symbol.iterator] is not a function
我的理解是不允许使用布尔值作为展开元素,在这种情况下 ...false
。
但是...( cond ? extraInfo : {} )
好像也不行。
这是怎么回事?
就这样吧
...(cond ? extraInfo : [])
真实演示
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 );
带有错误的演示
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 );
另一种方式:
条件为真:
var extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
]
var cond = true;
var userInfo = [
{
z: 8
},
{
z: 10
},
...(cond && extraInfo || [])
]
console.log(userInfo);
条件为假:
var extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
]
var cond = false;
var userInfo = [
{
z: 8
},
{
z: 10
},
...(cond && extraInfo || [])
]
console.log(userInfo);
let getMyValue = cond ? [].concat(extraInfo, userInfo) : userInfo;
让我们检查一下
const extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
];
const userInfo = [
{
z: 8
},
{
z: 10
},
];
const cond = false;
let getMyValue = cond ? [].concat(extraInfo, userInfo) : userInfo;
console.log(getMyValue)
const extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
];
const userInfo = [
{
z: 8
},
{
z: 10
},
];
const cond = true;
let getMyValue = cond ? [].concat(extraInfo, userInfo) : userInfo;
console.log(getMyValue)
有条件地将一个实体传播到对象
console.log(
{
name: 'Alex',
age: 19,
...(true && { city: 'Kyiv' }),
...(false && { country: 'Ukraine' })
}
)
// { name: 'Alex', age: 19, city: 'Kyiv' }
有条件地将一个实体传播到数组
console.log(
[
'Dan',
'Alex',
...(true ? ['Robin'] : [])
]
)
// [ 'Dan', 'Alex', 'Robin' ]
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)
]
当 cond
为真时,我需要额外信息和用户信息。
当cond
为false时,只需要userInfo。
问题是当 cond
为假时,我得到
TypeError: (intermediate value)(intermediate value)(intermediate value)[Symbol.iterator] is not a function
我的理解是不允许使用布尔值作为展开元素,在这种情况下 ...false
。
但是...( cond ? extraInfo : {} )
好像也不行。
这是怎么回事?
就这样吧
...(cond ? extraInfo : [])
真实演示
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 );
带有错误的演示
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 );
另一种方式:
条件为真:
var extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
]
var cond = true;
var userInfo = [
{
z: 8
},
{
z: 10
},
...(cond && extraInfo || [])
]
console.log(userInfo);
条件为假:
var extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
]
var cond = false;
var userInfo = [
{
z: 8
},
{
z: 10
},
...(cond && extraInfo || [])
]
console.log(userInfo);
let getMyValue = cond ? [].concat(extraInfo, userInfo) : userInfo;
让我们检查一下
const extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
];
const userInfo = [
{
z: 8
},
{
z: 10
},
];
const cond = false;
let getMyValue = cond ? [].concat(extraInfo, userInfo) : userInfo;
console.log(getMyValue)
const extraInfo = [
{
a: 11,
b: 25
},
{
a: 12,
b: 34
},
{
a: 1,
c: 99
}
];
const userInfo = [
{
z: 8
},
{
z: 10
},
];
const cond = true;
let getMyValue = cond ? [].concat(extraInfo, userInfo) : userInfo;
console.log(getMyValue)
有条件地将一个实体传播到对象
console.log(
{
name: 'Alex',
age: 19,
...(true && { city: 'Kyiv' }),
...(false && { country: 'Ukraine' })
}
)
// { name: 'Alex', age: 19, city: 'Kyiv' }
有条件地将一个实体传播到数组
console.log(
[
'Dan',
'Alex',
...(true ? ['Robin'] : [])
]
)
// [ 'Dan', 'Alex', 'Robin' ]