Javascript 仅当定义了名称时才向对象添加动态特性
我有这样一个函数:Javascript 仅当定义了名称时才向对象添加动态特性,javascript,ecmascript-6,Javascript,Ecmascript 6,我有这样一个函数: const getKeysAs = (key1, key2) => { return { [key1]: state.key1, [key2]: state.key2 } } 因此,如果state.key1是'a',state.key2是'b',调用getKyesAs('one','two')将返回 { one: 'a', two: 'b' } 现在,如果其中一个参数是未定义的,是否有办法不将其包含在返回的对象
const getKeysAs = (key1, key2) => {
return {
[key1]: state.key1,
[key2]: state.key2
}
}
因此,如果state.key1是'a',state.key2是'b',调用getKyesAs('one','two')
将返回
{
one: 'a',
two: 'b'
}
现在,如果其中一个参数是未定义的
,是否有办法不将其包含在返回的对象中?使用
使用
可以有条件地将属性添加到具有
如果某些args函数是
未定义的
、空的
或0
(错误值),则不会将其添加到对象中。您可以有条件地使用
如果一些args函数是
未定义的
、空的
或0
(假值),则不会将其添加到对象中。有一种非常可扩展的方法:
const state={
a:“你好”,
}
函数getKeysAs(键){
返回[…参数].reduce((acc,cur)=>{
const newValue=state[cur]&&{[cur]:state[cur]}
返回{…acc,…newValue}
}, {})
}
log(getKeysAs(“a”,“b”))
有一种非常可扩展的方法:
const state={
a:“你好”,
}
函数getKeysAs(键){
返回[…参数].reduce((acc,cur)=>{
const newValue=state[cur]&&{[cur]:state[cur]}
返回{…acc,…newValue}
}, {})
}
console.log(getKeysAs(“a”、“b”)
假设您实际上打算执行状态[key1]
,而不是状态.key1
,下面是一个不会创建多余对象的解决方案:
const getKeysAs = (...keys) => {
const result = {};
for (const key of keys) {
if (key != null) {
result[key] = state[key];
}
}
return result;
}
假设您实际上打算执行
state[key1]
,而不是state.key1
,下面是一个不会创建多余对象的解决方案:
const getKeysAs = (...keys) => {
const result = {};
for (const key of keys) {
if (key != null) {
result[key] = state[key];
}
}
return result;
}
const o={};如果(键1)o[key1]=你的意思是说状态[key1]
?常量o={};如果(键1)o[key1]=代码>…?你的意思是说状态[key1]
?对象解构指的是从对象中获取值。你在做相反的事。这种语法称为对象扩展。对象分解指的是从对象中获取值。你在做相反的事。这种语法称为对象扩展。假设OP实际上意味着执行state[key1]
,而不是他们示例中的state.key1
。是的。我建议他保持一贯的状态。这将使代码更容易理解和扩展。我同意你的意思,如果你的意思是状态应该是一个数组,而不是一个对象。但是如果你不是这个意思,那么state[key1]和state.key1都是一样的,对吗@donedeal0在我的示例中,状态仍然是一个对象。state[value]表示state.nameOfMyDynamicValue,state.value表示state.value。所以,通过state[cur],实际上可以获取state.nameOfCurrentKey。arguments是从函数中获取所有参数的本机方法,它不常用,所以看起来很花哨。这里的参数是[“a”,“b”]。因此,首先减少round=>“a”:state.a,然后是“b”:state.b。假设OP实际上意味着执行state[key1]
,而不是他们示例中的state.key1
。是的。我建议他保持一贯的状态。这将使代码更容易理解和扩展。我同意你的意思,如果你的意思是状态应该是一个数组,而不是一个对象。但是如果你不是这个意思,那么state[key1]和state.key1都是一样的,对吗@donedeal0在我的示例中,状态仍然是一个对象。state[value]表示state.nameOfMyDynamicValue,state.value表示state.value。所以,通过state[cur],实际上可以获取state.nameOfCurrentKey。arguments是从函数中获取所有参数的本机方法,它不常用,所以看起来很花哨。这里的参数是[“a”,“b”]。所以首先减少轮数=>“a”:state.a,然后是“b”:state.b。
const getKeysAs = (...keys) => {
const result = {};
for (const key of keys) {
if (key != null) {
result[key] = state[key];
}
}
return result;
}