Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 如何在结果中添加下划线但不添加falsy值的映射_Javascript_Underscore.js - Fatal编程技术网

Javascript 如何在结果中添加下划线但不添加falsy值的映射

Javascript 如何在结果中添加下划线但不添加falsy值的映射,javascript,underscore.js,Javascript,Underscore.js,我有一个对象数组,我只想在子对象通过条件时保存它。此时,我首先使用map,然后使用filter,结果如下: var a = _.filter( _.map(activities.toJSON(), function (activity) { if (activity.verb !== 'test') { return activity.object; } }), function(b){return b;}); 这似乎有点奇怪。有更好的方法吗。你可

我有一个对象数组,我只想在子对象通过条件时保存它。此时,我首先使用
map
,然后使用
filter
,结果如下:

   var a = _.filter(
    _.map(activities.toJSON(), function (activity) {
    if (activity.verb !== 'test') {
      return activity.object;
    }
  }), function(b){return b;});
这似乎有点奇怪。有更好的方法吗。

你可以试试

你可以试试


每当你开始做类似
\uf.g(…)
的事情时,你都应该考虑使用。你可以这样做:

var a = _.chain(activities.toJSON())
         .select(function(a) { return a.verb !== 'test' })
         .map(function(a) { return a.object })
         .value();
我也调整了你的逻辑来简化事情,没有必要做两次相同的测试。如果将函数放入变量中,可以使此类内容非常可读:

var not_tests   = function(a) { return a.verb !== 'test' };
var extract_obj = function(a) { return a.object };
var results     = _.chain(activities.toJSON())
                   .select(not_tests)
                   .map(extract_obj)
                   .value();
演示:

使用这种方法会有相当多的复制,因此您可能只想走老路,使用一个循环:

var json = activities.toJSON();
var a    = [ ];
for(var i = 0; i < json.length; ++i)
    if(json[i].verb !== 'test')
        a.push(json[i].object);
var json=activities.toJSON();
var a=[];
for(var i=0;i

JavaScript中的循环完全没有问题。

每当你开始做类似
\uf(\ug(…)
的事情时,你应该考虑使用。你可以这样做:

var a = _.chain(activities.toJSON())
         .select(function(a) { return a.verb !== 'test' })
         .map(function(a) { return a.object })
         .value();
我也调整了你的逻辑来简化事情,没有必要做两次相同的测试。如果将函数放入变量中,可以使此类内容非常可读:

var not_tests   = function(a) { return a.verb !== 'test' };
var extract_obj = function(a) { return a.object };
var results     = _.chain(activities.toJSON())
                   .select(not_tests)
                   .map(extract_obj)
                   .value();
演示:

使用这种方法会有相当多的复制,因此您可能只想走老路,使用一个循环:

var json = activities.toJSON();
var a    = [ ];
for(var i = 0; i < json.length; ++i)
    if(json[i].verb !== 'test')
        a.push(json[i].object);
var json=activities.toJSON();
var a=[];
for(var i=0;i

JavaScript中的循环没有任何问题。

我想您正在寻找:

另一种方法,我认为在语义上有点好,就是过滤掉你不想要的,然后使用

var a = _.filter(activities.toJSON(), function (activity) {
    return activity.verb !== 'test';
}).pluck('object');

我想你在寻找:

另一种方法,我认为在语义上有点好,就是过滤掉你不想要的,然后使用

var a = _.filter(activities.toJSON(), function (activity) {
    return activity.verb !== 'test';
}).pluck('object');

对不起,这个不行。在第二次调用reduce函数时,accum为1,因此没有方法
push
我没有测试代码。我来看看。这应该有效。在任何情况下,当您返回
acum
时,它都应该有效,而不是
acum.push
。原因推送返回数组的新长度。但毕竟,似乎一个简单的
循环将使每个
循环都相同,而不需要从内部函数返回某些内容。我认为
reduce
比创建一个数组然后迭代集合并推送数组要好
reduce
一次完成所有操作。抱歉,这不起作用。在第二次调用reduce函数时,accum为1,因此没有方法
push
我没有测试代码。我来看看。这应该有效。在任何情况下,当您返回
acum
时,它都应该有效,而不是
acum.push
。原因推送返回数组的新长度。但毕竟,似乎一个简单的
循环将使每个
循环都相同,而不需要从内部函数返回某些内容。我认为
reduce
比创建一个数组然后迭代集合并推送数组要好
reduce
一次完成这一切。如果使用
.chain()
或者我非常喜欢
.chain
,这会更好。我通常避免使用
.chain()
,除非一行中有>2个下划线调用-否则会同时添加
.chain()
.value()
看起来太臃肿了。使用
.chain()
会更好,或者我非常喜欢
.chain
。我通常避免使用
.chain()
,除非一行中有>2个下划线调用-否则会同时添加
.chain()
.value()
似乎太过臃肿。毕竟,简单的JavaScript解决方案似乎是最清晰的解决方案。@AndreasKöberle:是的,如果逻辑中有更多步骤,或者步骤中使用的函数依赖于其他东西,我可能只会使用下划线(也就是说,有时候你想要
not_测试
,有时候你想要
not_煎饼
)。毕竟,简单的JavaScript解决方案似乎是最清晰的解决方案。@AndreasKöberle:是的,如果逻辑中有更多的步骤,或者如果步骤中使用的函数依赖于其他东西,我可能只会麻烦使用下划线(也就是说,有时你想要
非测试
,有时你想要
非煎饼
)。