Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “语法糖”用于设置对象属性(如果值为truthy)_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript “语法糖”用于设置对象属性(如果值为truthy)

Javascript “语法糖”用于设置对象属性(如果值为truthy),javascript,ecmascript-6,Javascript,Ecmascript 6,我不知道这是否存在,但在我的项目中,我有很多解析和验证。I以5-10+行ifvalue对象结束。value=value 我可以选择object.value=value | |你最喜欢的falsy值,但是这个对象有一个falsy值的属性 也就是说,这不是生产代码,只是为了让您了解我所说的内容 let filter = {} let thing = ctx.query.thing thing = Validation.validateThingy(thing) if(thing) filter

我不知道这是否存在,但在我的项目中,我有很多解析和验证。I以5-10+行ifvalue对象结束。value=value

我可以选择object.value=value | |你最喜欢的falsy值,但是这个对象有一个falsy值的属性

也就是说,这不是生产代码,只是为了让您了解我所说的内容

let filter = {}

let thing = ctx.query.thing

thing = Validation.validateThingy(thing)

if(thing) filter.thing = thing

// +50 more param parsing/request body parsing

return DB.find(filter).then(etc...)
有没有人知道一种更优雅的方法来做这样的事情,而不必做| |或循环对象的属性并过滤掉虚假的值?

我的错,OP明确地说:

…不执行| |或循环对象的属性并过滤掉虚假值

…我只是错过了。下面的例子就是这样

对于没有OP偏好的未来读者:

您可以收集对象中的值,然后使用实用程序函数循环这些值,并仅复制真实值:

let values = {};
values.thing = Validation.validateThingy(ctx.query.thing);
// +50 others...
let filter = copyTruthy({}, values);
return DB.find(filter).then(/*etc...*/);
copyTruthy在哪里:

我的错,OP清楚地说:

…不执行| |或循环对象的属性并过滤掉虚假值

…我只是错过了。下面的例子就是这样

对于没有OP偏好的未来读者:

您可以收集对象中的值,然后使用实用程序函数循环这些值,并仅复制真实值:

let values = {};
values.thing = Validation.validateThingy(ctx.query.thing);
// +50 others...
let filter = copyTruthy({}, values);
return DB.find(filter).then(/*etc...*/);
copyTruthy在哪里:


您可以为它使用一个带有对象、键和值的函数

function setValue(object, key, value) {
    if (value) {
        object[key] = value;
    }
}

// usage
let filter = {};

setValue(filter, 'thing', Validation.validateThingy(ctx.query.thing));
也可以将验证部分移到函数内部

function setValue(object, key) {
    var value = Validation.validateThingy(ctx.query[key])
    if (value) {
        object[key] = value;
    }
}

// usage
let filter = {};

setValue(filter, 'thing');

您可以为它使用一个带有对象、键和值的函数

function setValue(object, key, value) {
    if (value) {
        object[key] = value;
    }
}

// usage
let filter = {};

setValue(filter, 'thing', Validation.validateThingy(ctx.query.thing));
也可以将验证部分移到函数内部

function setValue(object, key) {
    var value = Validation.validateThingy(ctx.query[key])
    if (value) {
        object[key] = value;
    }
}

// usage
let filter = {};

setValue(filter, 'thing');

你可以滥用对&&的短路评估,然后说thing&&filter.thing=thing,但这比你所拥有的imo更难看。我认为你所拥有的或是一个抽象的函数都是更好的选择。

你可以滥用对&&的短路评估,然后说thing&&filter.thing=thing,但它比你所拥有的imo更难看认为您拥有的或抽象的函数都是更好的选择。

如何:

   thing && (filter.thing = thing);
那么:

   thing && (filter.thing = thing);

使用三元表达式作为独立语句将起作用


价值?object.value=值:空

使用三元表达式作为独立语句将有效



价值?object.value=值:空

是的,我想到了,但那会增加太多的开销,而且我在问题的底部添加了这个解决方案,因为这不是我想做的。谢谢你的建议。@JamesKenaley:呃,嗯,这就是我没有仔细阅读的原因。。。唉,我的错。@JamesKenaley:不过,与Nina的优秀解决方案中的所有函数调用相比,我想知道在使用了优化的for of的JavaScript引擎上的开销,如果开销是个小问题的话…@TJCrowder:不是真正的性能开销,而是为每个请求执行sync for循环的代码开销。只是偏好的问题。@JamesKenaley:我没听你的。您在没有ifs的情况下完成50+个赋值,然后在最后对实用程序函数进行单个函数调用。什么是代码开销?是的,我想到了,但那会增加太多的开销,而且我在问题的底部添加了这个解决方案,而不是我想做的。谢谢你的建议。@JamesKenaley:呃,嗯,这就是我没有仔细阅读的原因。。。唉,我的错。@JamesKenaley:不过,与Nina的优秀解决方案中的所有函数调用相比,我想知道在使用了优化的for of的JavaScript引擎上的开销,如果开销是个小问题的话…@TJCrowder:不是真正的性能开销,而是为每个请求执行sync for循环的代码开销。只是偏好的问题。@JamesKenaley:我没听你的。您在没有ifs的情况下完成50+个赋值,然后在最后对实用程序函数进行单个函数调用。什么代码开销?是的,我喜欢。JS中没有内置任何东西,是吗?事实上没有,正如我所知。@JamesKenaley:这些都是关于你的选择:你不想做的对象属性循环,像这样的实用函数,或者滥用&&as。但是&&基本上只是一个穿着愚蠢衣服的if-是的,我喜欢。JS中没有内置任何东西,是吗?事实上没有,正如我所知。@JamesKenaley:这些都是关于你的选择:你不想做的对象属性循环,像这样的实用函数,或者滥用&&as。但是&&基本上只是一个穿着愚蠢衣服的if-如果你读到他强烈反对使用这样的东西。仅仅因为你能做到,并不意味着你应该做到。我认为,任何一个过来阅读代码的人都必须考虑一下。至少一开始是这样。我四分之一的赞成票是对答案的,另外四分之三的赞成票是对使用它的注意事项的-这确实回答了问题,如果我有足够的代表投票,我会的。与函数一起,th
啊!如果你读到他强烈反对使用这样的东西。仅仅因为你能做到,并不意味着你应该做到。我认为,任何一个过来阅读代码的人都必须考虑一下。至少一开始是这样。我四分之一的赞成票是对答案的,另外四分之三的赞成票是对使用它的注意事项的-这确实回答了问题,如果我有足够的代表投票,我会的。不过,还是要使用该函数!中的快捷方式求值获得我的投票,但如果您不喜欢它,那么:object.value=value | | object如何。value@mikeapr4这将把object.value的值设置为undefined,对象现在将有一个value键。这也是问题中的第一个警告。不正确-看哦,等等,我明白了,object.value没有一个值作为开始,nmin中的快捷方式求值获取我的投票,但是如果您不喜欢它,怎么样:object.value=value | | object。value@mikeapr4这将把object.value的值设置为undefined,对象现在将有一个value键。这也是问题中的第一个警告。不正确-看哦,等等,我明白了,object.value没有一个值作为开头,nm