Underscore: _.isEmpty ์ˆซ์ž์— ๋Œ€ํ•œ ๋™์ž‘

์— ๋งŒ๋“  2012๋…„ 01์›” 13์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jashkenas/underscore

var cow = {a: 1, b: {}, c: []};
_.isEmpty(cow); // returns false

isEmpty๋Š” '๋น„์–ด ์žˆ์ง€ ์•Š์€'๊ฐ’์œผ๋กœ ์ˆซ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

_.isEmpty(cow.a); // returns true

๊ทธ๋Ÿฌ๋‚˜ a : 1์˜ ๊ฐœ๋ณ„ k, v๋Š” ๋น„์–ด์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฝ์—ˆ๊ณ  ์›๋ž˜ _.isEmpty๋Š” ๋ฌธ์ž์—ด์„์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์˜๋„ ๋œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜์žˆ๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋„ค, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ฌผ์–ด๋ด์„œ ๊ธฐ๋ป์š” :-)

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด _.isEmpty ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณธ ๋ฐฉ์‹์€ ๊ฐ’ (๋ชจ๋“  ๊ฐ’)์ด ํŠน์ • ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฌธ์ œ์— ๋ถ€๋”ชํžˆ๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ "๊ฐ์ฒด์— ๊ฐ’์ด์—†๋Š” ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋‚˜์™€ ์žˆ์œผ๋ฉฐ ์ˆซ์ž๋Š” ๊ฐ’์œผ๋กœ ํ•œ์ •๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์—†๋Š”์ด ๋ณ€๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋” ํฐ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‘ ๋ฒˆ์งธ๋กœ ์ข‹์€ ์ œ์•ˆ์€ ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ˆซ์ž์— ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

๋ชจ๋“  13 ๋Œ“๊ธ€

๋‚ด๊ฐ€ ๋งŒ๋‚œ ์œ ์Šค ์ผ€์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ํ–ˆ์Šต๋‹ˆ๋‹ค.

_.each(cow, function(v, k) {
  if (_.isEmpty(v)) {
    // do something with k because of v being empty
  }
});

๋”ฐ๋ผ์„œ cow.a๋Š” cow.b ๋ฐ cow.c์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฃผ๋ณ€์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด (๊ทธ๋ฆฌ๊ณ  ๋ฐ‘์ค„์˜ ์ •์‹ ์ด๋‚˜ ๋น„์ „์„ ๊นจ์ง€ ์•Š์œผ๋ฉด) ํ›จ์”ฌ ๊น”๋” ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„ค, _.isEmpty ๋Š” ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์ด๋‚˜ ์ˆซ์ž์— ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์ˆซ์ž์— ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

https://github.com/documentcloud/underscore/commit/79f65b440ad5e14ff2c624a836a3eff33465be9f
https://github.com/documentcloud/underscore/blob/322a64135dc3c4a649f102e962054310c2b39c04/underscore.js#L808

๊ทธ๋ ‡๋‹ค๋ฉด ์ˆซ์ž์— ์–ด๋–ค ๋Œ€์•ˆ์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

@jashkenas ๋˜๋Š” @michaelficarra : _.isNumber ๊ฐ€ _.isEmpty ์—์„œ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ํŠน๋ณ„ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ _.isArray ๋ฐ _.isString ์‚ฌ์šฉ)

์™œ ๊ทธ๋ž˜์•ผํ•˜๋‚˜์š”?

๋„ค, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ฌผ์–ด๋ด์„œ ๊ธฐ๋ป์š” :-)

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด _.isEmpty ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณธ ๋ฐฉ์‹์€ ๊ฐ’ (๋ชจ๋“  ๊ฐ’)์ด ํŠน์ • ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฌธ์ œ์— ๋ถ€๋”ชํžˆ๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ "๊ฐ์ฒด์— ๊ฐ’์ด์—†๋Š” ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋‚˜์™€ ์žˆ์œผ๋ฉฐ ์ˆซ์ž๋Š” ๊ฐ’์œผ๋กœ ํ•œ์ •๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์—†๋Š”์ด ๋ณ€๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋” ํฐ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‘ ๋ฒˆ์งธ๋กœ ์ข‹์€ ์ œ์•ˆ์€ ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ˆซ์ž์— ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

์ˆซ์ž๊ฐ€ null์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋Œ€์‹  isEmpty ์ˆซ์ž๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ณต์‹ ๋ฌธ์„œ์—๋„ "๊ฐ์ฒด์— ๊ฐ’์ด ์—†์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. JavaScript์—์„œ ์ˆซ์ž๋Š” (๋งค์šฐ ์Šฌํ”„๊ฒŒ๋„) ๊ฐ์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

_.isEmpty ๋ฌธ์„œ ์กฐ์ •์œผ๋กœ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฐพ๊ณ ์žˆ๋Š” ๊ฒƒ์€ _.exists ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€์„ ์œ„ํ•ด ์˜๋ฏธ๊ฐ€ _.isEmpty(a) "์˜๋ฏธํ•˜๋Š” a ๋นˆ ๊ฐœ์ฒด?", ์ข…๋ฅ˜์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ฌธ์˜ : if obj == {} ๊ฐ’์ด ์•„๋‹Œ ์ฐธ์กฐ ์ผํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆซ์ž์™€ ๊ฐ™์€ ๊ฐ’์€ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ null ๋ฐ undefined๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

_.isEmpty ๊ตฌํ˜„ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

_.isEmpty = function(a) {
  return _.isEqual(a, {}) || _.isEqual(a, []) || _.isEqual(a, '');
}

@jashkenas ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” "๋น„์–ด ์žˆ์Œ"์ด ๋ณ€์ˆ˜๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :) http://www.php.net/manual/en/function.empty.php

@josser์— + :-p
ํ•˜์ง€๋งŒ ๋ฌธ์„œ์—์„œ ๋ช…ํ™•ํžˆํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ฒฉ์ฃผ๋กœ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ง„์ง€ํ•˜๊ฒŒ ๋ด…๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋งŒ๋‚ฌ๋Š”๋ฐ .. _.omit์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ

_.omit(someObject, _.isEmpty);
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

danilopolani picture danilopolani  ยท  5์ฝ”๋ฉ˜ํŠธ

jdalton picture jdalton  ยท  4์ฝ”๋ฉ˜ํŠธ

markvr picture markvr  ยท  3์ฝ”๋ฉ˜ํŠธ

acl0056 picture acl0056  ยท  5์ฝ”๋ฉ˜ํŠธ

xiaoliwang picture xiaoliwang  ยท  3์ฝ”๋ฉ˜ํŠธ