Underscore: _. рдмрд┐рдирд╛ рд╕рд░рдгреА рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЬрдире░ 2011  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jashkenas/underscore

_. рдХреА рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд░рдгреА рдФрд░ рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдореИрдВ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдФрд░ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛
_.рдмрд┐рдирд╛ ([1,2,3], [1, 2])
рд░рд┐рдЯрд░реНрди
[3]

рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ _.рдмрд┐рдирд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ -
_.рдмрд┐рдирд╛ ([1,2,3,[1]], [1], 1)
рд░рд┐рдЯрд░реНрди
[2, 3, [1]]

enhancement wontfix

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдвреВрдВрдврддреЗ рд╣реИрдВ.... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

рд╕реЗ: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХрд╛ рд╣реИред

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply

_.without.apply(_, [1, 2, 3], [1, 2])

рдЬрд╝рд░реВрд░! рдореБрдЭреЗ рдмреЗрд╡рдХреВрдл, рдореИрдВ рдХреИрд╕реЗ рднреВрд▓ рд╕рдХрддрд╛ рд╣реВрдБ ...

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

_.without.apply(_, [[1,2,3], 1, 2])

рдЬреЛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ (рдореВрд▓ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдмрд╣рд┐рд╖реНрдХрд░рдг рд╕рд░рдгреА рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛)ред

рдЕрджреНрдпрддрди: рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯрд┐рдХрдЯ рдмрдирд╛рдпрд╛: https://github.com/documentcloud/underscore/issues/issue/118

рдореБрдЭреЗ рдЖрдк рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛: рдЬреЗрд░реЗрдореА рдХреЛ _.рдмрд┐рдирд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕реБрд╕рдВрдЧрдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдУрдиреНрдбреНрд░реЗ рдХреЛ рдЬреЗрд░реЗрдореА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╣реИрдХрд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рджреЛ рдирдП рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рд╢реБрд░реВрдЖрдд рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: _.difference(*arrays) рдФрд░ _.symdifference(a,b) : рдЕрдВрддрд░ рдкрд╣рд▓реА рд╕рд░рдгреА рд╕реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдЬреЛ рдЕрдиреНрдп рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ _.symdifference() рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬреЛ рдпрд╛ рддреЛ a рдпрд╛ b рдореЗрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред

рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП "рдкреНрд░реЗрд░рдгрд╛" рдкрд╛рдпрдерди рд╕реЗрдЯ рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдФрд░ рдЖрдИрдПрдордПрдЪрдУ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╕рд░рдгреА рддрдХ рд╣реА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛: _.рдмрд┐рдирд╛ред рд▓рд╛рдЧреВ рдХрд░реЗрдВ (_, [x] .concat (y)), y рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ x рдореЗрдВ рдорд╛рдиреЛрдВ рдХреА рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдЧрд╛ред

@rubenstolk рдХрд╛ рдЙрддреНрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрд╕рдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА, рдЗрд╕рд▓рд┐рдП рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЛ рдЗрдЯреИрд▓рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдиреЗ рд╡рд╛рд▓реА рдкреАрдврд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП! :рд░реЗрд▓рд╡реЗ_рдХрд╛рд░::рд░реЙрдХреЗрдЯ::рдЗрдВрджреНрд░рдзрдиреБрд╖::рдЙрдард╛рдпрд╛_рд╣рд╛рде:

_.without.apply(_, [originalArray].concat(removeArray));

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреАрдердм 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ @reggi рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛!

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдвреВрдВрдврддреЗ рд╣реИрдВ.... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

рд╕реЗ: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрдВрдж рд╣реИ, рд▓реЗрдХрд┐рди ES6 рдХрд╛ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛;)

рдЬреЛ рдХреЛрдИ рднреА ES6 рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХреА рдЦреЛрдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ @agwidarsito рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ ES6 рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]

рдзрдиреНрдпрд╡рд╛рдж @addisonbgross!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

marcalj picture marcalj  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

haggholm picture haggholm  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jdalton picture jdalton  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

afranioce picture afranioce  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zackschuster picture zackschuster  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ