Created
January 13, 2012 21:32
-
-
Save rwaldron/1608810 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// JS Today | |
function List() { | |
this.list = [].slice.call(arguments); | |
} | |
List.prototype.diff = function( array ) { | |
return array.filter(function(item) { | |
return !~this.list.indexOf(item); | |
}, this); | |
}; | |
var a = new List(1, 2, 3, 4, 5, 6); | |
a.diff([ 0, 2, 4, 6, 8, 10 ]); | |
// [ 0, 8, 10 ] | |
// Block Lambda and Rest Params | |
function List( ...args ) { | |
this.list = args; | |
} | |
List.prototype.diff = function( array ) { | |
return array.filter({ |item| | |
!~this.list.indexOf(item); | |
}); | |
}; | |
Well, maybe this should be updated to include an example, but you can use an explicit return as well.
Why the () around it? Why not
List.prototype.diff = function( array ) {
return array.filter { |item|
!~this.list.indexOf(item);
};
};
Think about this
List.prototype.diff = function( array ) {
return array.filter { |item|
!~this.list.indexOf(item);
}.sort { |a, b|
// Do something with a and b
};
};
I'm not a fan of }.
Rick,
Note that you don't need the bind() call in ES5. The 2nd argument to filter() becomes the this value in the predicate.
I still want blocks, though!
Why the () around it?
In that case JS either gets implicit parens for function calls or block lambda becomes a special case you have to explain to every new js developer.
@david, ya know... I knew that and completely forgot thank you for pointing it out. I will update asap.
@ryan that only flies if paren-free makes the cut. I meant to be conservative about what is being illustrated
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I don't like the implicit return, but besides that it's neat.