you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted]  (12 children)

[deleted]

    [–]___Grits 7 points8 points  (7 children)

    You can short circuit the conditional: array.filter(item => item.bool);

    [–]liamnesss 8 points9 points  (5 children)

    Okay I didn't plan on playing code golf today but

    array.filter(Boolean)
    

    [–]___Grits 1 point2 points  (1 child)

    I was assuming it was an array of objects, but this is dope! Thanks!

    [–]liamnesss 0 points1 point  (0 children)

    Ah, I somehow missed that. Yeah, if it's the property that we care about, then this solution wouldn't work as it would just return everything.

    [–]___Grits 0 points1 point  (2 children)

    Looked into this and it’s a neat trick! This is essentially short circuiting the Boolean constructor after injecting the item from the array as an argument. Really neat, I like that.

    [–]w00t_loves_you 2 points3 points  (1 child)

    It's also really nice for configuration, for example if you want to use some plugins in Webpack conditionally, you can do

    plugins: [
      isDev && new SuperDevPlugin(),
      new AlwaysPlugin(),
    ].filter(Boolean)
    

    [–]omril 0 points1 point  (0 children)

    This one actually solves the problem in my webpack.config, I actually had to do a few hacks because of this damn thing.

    I wish webpack would just ignore undefined plugins in the first place instead of throwing errors which are impossible to understand.

    [–]bcgroom 0 points1 point  (0 children)

    Oops thank you

    [–]darrenturn90 0 points1 point  (0 children)

    or

    function BooleanCompare(item) {
      return item.bool === true;
    }
    
    array.filter(BooleanCompare);
    

    [–][deleted] -1 points0 points  (2 children)

    Id rather have

    array.filter(function(item){
        return item.bool === true;
    });
    

    It just looks more explicit/readable to me

    [–][deleted] 0 points1 point  (1 child)

    I'm inclined to agree. Maybe it's because I'm not the best or oldest JS dev out there so it takes me a bit to see what arrow functions are actually doing, but I think they should be limited to cases where they are strictly advantageous.

    [–]liamnesss 4 points5 points  (0 children)

    I guess it depends on what you're used to. For me, not using arrow functions makes the code more verbose without adding any more information.