๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/JavaScript jQuery

[JavaScript / jQuery] ์‡ผํ•‘๋ชฐ ์ƒํ’ˆ ์ง„์—ด ๋ฐ ์ƒํ’ˆ ์ •๋ ฌ ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ

by Connecting-the-dots 2022. 3. 9.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!

  • ์˜ค๋Š˜์€ ์ƒํ’ˆ ์ง„์—ด ๋ฐ ์ƒํ’ˆ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.
  • ์›๋ž˜ ๊ฐ•์˜์—์„œ ๊ฐ•์‚ฌ๋‹˜์ด ์ง„ํ–‰ํ•œ ๋ฐฉ์‹๋Œ€๋กœ๋„ ํ•ด๋ณธ ํ›„, "์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ์ค„์ผ ์ˆ˜ ์žˆ์„๊นŒ" ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค. (์•„์ง ๋ฐฐ์šฐ๋Š” ๊ณผ์ •์ด๋ผ.. ๋ญ๊ฐ€ ๋” ๋‚˜์€ ๋ฐฉ์‹์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๊ณ  ๊ณ ๋ฏผํ•ด๋ดค๋‹ค๋Š” ๋ฐ์— ์˜์˜๋ฅผ ๋‘”๋‹ค ใ…Žใ…Ž) 
  • ์šฐ์„  ์ƒํ’ˆ ์ง„์—ด์˜ ๊ฒฝ์šฐ, html ํŒŒ์ผ์— ๋ ˆ์ด์•„์›ƒ์„ ํ•˜๋“œ์ฝ”๋”ฉ์„ ํ•ด๋†“๊ณ  forEach ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉ ํ›„, ์ง„์—ด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋ฉด์„œ ํ•˜๋“œ์ฝ”๋”ฉํ•œ ๋ถ€๋ถ„์„ ์ง€์›Œ๋‚˜๊ฐ”๋‹ค.
  • ๊ทธ ๋‹ค์Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” JavaScript ๋ฌธ๋ฒ•์ธ sort, filter ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋‚˜๋‹ค์ˆœ ์ •๋ ฌ, ๊ฐ€๊ฒฉ์ˆœ ์ •๋ ฌ,  6๋งŒ์› ์ดํ•˜ ๋ณด๊ธฐ(ํ•„ํ„ฐ) ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด๋ณด์•˜๋‹ค. 
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฒซํ™”๋ฉด์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ์›๋ž˜๋Œ€๋กœ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.
  • ์ถ”ํ›„์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฐ€๊ฒฉ๋Œ€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฑฐ๊ธฐ์— ๋งž์ถฐ ํ•„ํ„ฐ๋ง๋˜๋„๋ก ๊ตฌํ˜„ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

๐Ÿ’œ ์ƒํ’ˆ ์ง„์—ด

๐Ÿค ์ดˆ๋ฐ˜ JavaScript

// ์ƒํ’ˆ ๋ฐ์ดํ„ฐ
var products = [
    { id : 0, price : 70000, title : 'Blossom Dress' },
    { id : 1, price : 50000, title : 'Springfield Shirt' },
    { id : 2, price : 60000, title : 'Black Monastery' }
]
  • ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ž๋ฃŒ์ด๋‹ค.

๐Ÿค ์ดˆ๋ฐ˜ HTML

<div class="card-group container">
  <div class="card">
    <img src="https://via.placeholder.com/600">
    <div class="card-body">
      <h5>Card title</h5>
      <p>๊ฐ€๊ฒฉ : 70000</p>
      <button class="btn btn-danger">์ฃผ๋ฌธํ•˜๊ธฐ</button>
    </div>
  </div>
  <div class="card">
    <img src="https://via.placeholder.com/600">
    <div class="card-body">
      <h5>Card title</h5>
      <p>๊ฐ€๊ฒฉ : 70000</p>
      <button class="btn btn-danger">์ฃผ๋ฌธํ•˜๊ธฐ</button>
    </div>
  </div>
  <div class="card">
    <img src="https://via.placeholder.com/600">
    <div class="card-body">
      <h5>Card title</h5>
      <p>๊ฐ€๊ฒฉ : 70000</p>
      <button class="btn btn-danger">์ฃผ๋ฌธํ•˜๊ธฐ</button>
    </div>
  </div>
    <div class="container">
        <button class="btn btn-danger mt-3" id="sortAbc">๊ฐ€๋‚˜๋‹ค์ˆœ ์ •๋ ฌ</button>
        <button class="btn btn-danger mt-3" id="sortPrice">๊ฐ€๊ฒฉ์ˆœ ์ •๋ ฌ</button>
        <button class="btn btn-danger mt-3" id="filterPrice">6๋งŒ์› ์ดํ•˜ ๋ณด๊ธฐ</button>
        <button class="btn btn-danger mt-3" id="revert">์›๋ž˜๋Œ€๋กœ</button>
    </div>
</div>
  • ์ฒ˜์Œ์˜ ํ•˜๋“œ์ฝ”๋”ฉ๋œ html ํŒŒ์ผ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด card ํด๋ž˜์Šค๊ฐ€ ์ƒํ’ˆ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋˜๋Š” ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, card ํด๋ž˜์Šค๋ฅผ ํ…œํ”Œ๋ฆฟํ™”ํ•œ ํ›„ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์„œ card-group container ํด๋ž˜์Šค์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์•˜๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ ์ƒํ’ˆ ๊ฐœ์ˆ˜๋งŒํผ ๋งŒ๋“ค๋ฉด ์นด๋“œ ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ค๊ธฐ ๋!

๐Ÿค ํ›„๋ฐ˜ JavaScript

// ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ ์ „
products.forEach(item => {
  let template = `
  <div class="card">
    <img src="https://via.placeholder.com/600">
    <div class="card-body">
      <h5 class="title">${item.title}</h5>
      <p class="price">๊ฐ€๊ฒฉ : ${item.price}</p>
      <button class="btn btn-danger">์ฃผ๋ฌธํ•˜๊ธฐ</button>
    </div>
  </div>
  `
  $('#items').append(template);
});

// ํ•จ์ˆ˜๋กœ ๋ฐ”๊พผ ํ›„
function layout(items){
  items.forEach(item => {
    let template = `
    <div class="card">
      <img src="https://via.placeholder.com/600">
      <div class="card-body">
        <h5 class="title">${item.title}</h5>
        <p class="price">๊ฐ€๊ฒฉ : ${item.price}</p>
        <button class="btn btn-danger">์ฃผ๋ฌธํ•˜๊ธฐ</button>
      </div>
    </div>
    `
    $('#items').append(template);
  });
}
  • ์ผ๋‹จ ์ƒ์„ฑํ•ด์•ผํ•˜๋Š” card ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐ์„ ํ•ด๋ณด์ž.
    • card ํด๋ž˜์Šค ๋‚ด์šฉ ์ „์ฒด๋ฅผ template ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด๊ณ , ๊ทธ ๋ณ€์ˆ˜๋ฅผ card-group container ํด๋ž˜์Šค์— append ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (ํŽธ์˜์ƒ card-group container ํด๋ž˜์Šค ๋Œ€์‹  items ๋ผ๋Š” id ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€๋‹ค.)
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์ƒ์„ฑํ•ด์•ผํ•˜๋Š” card ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ, ์ฆ‰ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋งŒํผ์ด๋ผ๋ฉด? for ๋ฌธ์ด๋‚˜ forEach ๋ฌธ ๋“ฑ์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
    • ๋‚˜๋Š” forEach ๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด ํ•„์š”ํ•œ products ๋ฐฐ์—ด ๋‚ด์˜ ์ž๋ฃŒ๋“ค์„ item ์ด๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ, ํƒ€์ดํ‹€์ด ๋“ค์–ด๊ฐˆ ๋ถ€๋ถ„๊ณผ ๊ฐ€๊ฒฉ์ด ๋“ค์–ด๊ฐˆ ๋ถ€๋ถ„์— ๋ฐ”์ธ๋”ฉํ•ด์ฃผ๋ฉด์„œ ๋ ˆ์ด์•„์›ƒ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ๋‹ค.
  • ์ฒ˜์Œ์—๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค ์ƒ๊ฐ์€ ์—†์—ˆ๋Š”๋ฐ.. ์ •๋ ฌ ๊ธฐ๋Šฅ์ด๋‚˜ ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ๊ณ„์† ๋ ˆ์ด์•„์›ƒ์„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.
    • ๋ฐ˜๋ณตํ•ด์„œ ์จ์•ผ ํ•œ๋‹ค๋ฉด ๊น”๋”ํ•˜๊ฒŒ ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋‚ซ์ง€ ์•Š์„๊นŒ ํ•ด์„œ layout ์ด๋ผ๋Š” ์ด๋ฆ„์„ ๋ถ™์—ฌ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.
    • layout ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” products ๋กœ ํ•˜๋ฉด ๊ดœํžˆ ๋‚ด๊ฐ€ ํ—ท๊ฐˆ๋ฆด ๊ฒƒ ๊ฐ™์•„์„œ items ๋กœ ํ–ˆ๋‹ค.
  • ์—ฌ๊ธฐ๊นŒ์ง€ ์™„์„ฑํ•œ ํ›„ ํ•˜๋“œ์ฝ”๋”ฉํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค์„ ๋ชจ๋‘ ์ง€์›Œ์ฃผ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฒซํ™”๋ฉด์— ๋ฒ„ํŠผ๋“ค๋งŒ ๋œฌ๋‹ค.
    • ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ ์ „์—๋Š” ๋ฐ”๋กœ ๋ ˆ์ด์•„์›ƒ์ด ๋œจ์ง€๋งŒ, ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ์–ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์•ผ ๋ ˆ์ด์•„์›ƒ์ด ์ œ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค. 
    • ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ดˆ๊ธฐํ™”๋ฉด์ด๋ผ๋Š” ์ฃผ์„์„ ๋‹ฌ๊ณ  layout(products); ๋ผ๊ณ  ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๐Ÿค ํ›„๋ฐ˜ HTML

<div class="container">
    <div class="card-group container" id="items"></div>
    <div class="container">
        <button class="btn btn-danger mt-3" id="sortAbc">๊ฐ€๋‚˜๋‹ค์ˆœ ์ •๋ ฌ</button>
        <button class="btn btn-danger mt-3" id="sortPrice">๊ฐ€๊ฒฉ์ˆœ ์ •๋ ฌ</button>
        <button class="btn btn-danger mt-3" id="filterPrice">6๋งŒ์› ์ดํ•˜ ๋ณด๊ธฐ</button>
        <button class="btn btn-danger mt-3" id="revert">์›๋ž˜๋Œ€๋กœ</button>
    </div>
</div>
  • ๊ธฐ๋Šฅ ์™„์„ฑ ํ›„ ํ•˜๋“œ์ฝ”๋”ฉํ•œ ๋ถ€๋ถ„์„ ์ง€์šฐ๋ฉด ๊น”๋”ํ•˜๊ฒŒ items ๋ผ๋Š” id ๋ฅผ ๊ฐ€์ง„ ๋‚ด์šฉ ์—†๋Š” ํƒœ๊ทธ ํ•˜๋‚˜์™€ ๋ฒ„ํŠผ๋“ค๋งŒ ๋‚จ๋Š”๋‹ค.

๐Ÿ’œ ์ƒํ’ˆ ์ •๋ ฌ : ๊ฐ€๋‚˜๋‹ค์ˆœ ์ •๋ ฌ

  • sort ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฐ€๋‚˜๋‹ค์ˆœ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
  • ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ƒํ’ˆ๋ช… ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ๊ฑฐ๋ผ ์ƒํ’ˆ๋ช…์— ํ•˜์ด๋ผ์ดํŠธ๋ฅผ ์ฃผ์—ˆ๋‹ค. (๋ฒ„ํŠผ๋„ ๋ณ€ํ™”๋ฅผ ์ค„ ๊ฑธ..)
$('#sortAbc').click(function(){
  let productsAbc = products.slice();
  productsAbc.sort(function(item1, item2){
    if (item1.title < item2.title) return -1;
    else if (item1.title == item2.title) return 0;
    else return 1;
  });

  $('#items').html('');
  layout(productsAbc);
  $('.title').css('background','#FFFF9A');

})
  • sortAbc ๋ผ๋Š” id ๋ฅผ ๊ฐ€์ง„ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ, products ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ธ productsAbc ์˜ ๊ฐ์ฒด๋“ค ์ค‘ ๋‘ ๊ฐœ์”ฉ item1, item2 ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ ๊ทธ๊ฒƒ๋“ค์˜ title ์„ ๋น„๊ตํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค. (์ •ํ™•ํ•˜๊ฒŒ๋Š” ํ•ด๋‹นํ•˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ’์˜ ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.)
  • products ๋ฐฐ์—ด์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  slice ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ productsAbc ์˜ ์‚ฌ๋ณธ์„ ๋งŒ๋“  ์ด์œ ๋Š” sort ํ•จ์ˆ˜๊ฐ€ ์›๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์ด๊ฑธ ๋’ค๋Šฆ๊ฒŒ ์•Œ์•„์„œ ๋ฒ„ํŠผ๋“ค์ด ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋‹ค ์‚ฌ๋ณธ์„ ๋งŒ๋“ค์—ˆ๋‹ค.)
  • ๊ทธ ๊ณผ์ •์—์„œ ์ž‘์„ฑ๋œ if-else ๋ฌธ์€ sort ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ •์„์ ์ธ ๊ตฌ๋ฌธ์ธ๋ฐ, ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐฐ์› ๋‹ค๋ฉด ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋กœ ์ ์œผ๋ฉด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ธด ํ•˜๋‹ค.
  • ์ด์ œ ์ •๋ ฌ์„ ํ–ˆ์œผ๋ฉด layout ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ ˆ์ด์•„์›ƒ์„ ์ƒ์„ฑํ•˜์—ฌ items ๋ผ๋Š” id ๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋˜๋Š”๋ฐ, ๊ทธ ์ „์— items ๋ผ๋Š” id ๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง€์›Œ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    • ์™œ๋ƒํ•˜๋ฉด, ์ด์ „์— ์ด๋ฏธ ์ดˆ๊ธฐ ํ™”๋ฉด์šฉ์œผ๋กœ ์ƒํ’ˆ๋“ค์˜ ๋ ˆ์ด์•„์›ƒ์„ ์ƒ์„ฑํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— items ๋ผ๋Š” id ๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง€์›Œ์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ทธ ๋ ˆ์ด์•„์›ƒ๋“ค ๋‹ค์Œ์œผ๋กœ ๊ฐ€๋‚˜๋‹ค์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ ˆ์ด์•„์›ƒ๋“ค์ด ์ถ”๊ฐ€๋กœ ๋ถ™๊ธฐ ๋•Œ๋ฌธ!
  • ๊ทธ๋Ÿฌ๊ณ ๋‚˜์„œ ๋งˆ๋ฌด๋ฆฌ๋กœ ํ•˜์ด๋ผ์ดํŠธ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ํƒ€์ดํ‹€ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€๋‚˜๋‹ค์ˆœ์ด๋ฏ€๋กœ ์ƒํ’ˆ๋ช…์— ๋…ธ๋ž€์ƒ‰ ๊ณ„์—ด์˜ ํ•˜์ด๋ผ์ดํŠธ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๐Ÿ’œ ์ƒํ’ˆ ์ •๋ ฌ : ๊ฐ€๊ฒฉ์ˆœ ์ •๋ ฌ

  • ๊ฐ€๊ฒฉ์ˆœ ์ •๋ ฌ ๊ธฐ๋Šฅ ๋˜ํ•œ ์ •๋ ฌ์ด๋ฏ€๋กœ sort ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
  • ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฐ€๊ฒฉ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋˜๋Š” ๊ฑฐ๋ผ ๊ฐ€๊ฒฉ์— ํ•˜์ด๋ผ์ดํŠธ๋ฅผ ์ฃผ์—ˆ๋‹ค.
$('#sortPrice').click(function(){
  let productsPrice = products.slice();
  productsPrice.sort(function(item1, item2){
    return item1.price - item2.price;
  });

  $('#items').html('');

  layout(productsPrice);
  $('.price').css('background','#FFFF9A');
})
  • ์ „์ฒด์ ์ธ JavaScript ๊ตฌ์กฐ๋Š” ๊ฐ€๋‚˜๋‹ค์ˆœ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ฒ„ํŠผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • ๋‹ค๋งŒ, ์ด๋ฒˆ์—๋Š” ๊ฐ€๊ฒฉ์„ ๋น„๊ตํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ€๋‚˜๋‹ค์ˆœ ์ •๋ ฌ ๊ธฐ๋Šฅ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋บ„์…ˆ์˜ ๊ฒฐ๊ณผ๊ฐ’์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋œ๋‹ค.
  • ์ฐธ๊ณ ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด item2.price - item1.price ๋กœ return ์„ ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’œ ์ƒํ’ˆ ํ•„ํ„ฐ : 6๋งŒ์› ์ดํ•˜ ๋ณด๊ธฐ

  • ๋ ˆ์ด์•„์›ƒ์ด Bootstrap ์„ ์ด์šฉํ•œ ๋ฐ˜์‘ํ˜•์ด๋‹ค๋ณด๋‹ˆ ํ•„ํ„ฐ๋ง๋˜๋Š” ์ƒํ’ˆ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ์กฐ์ ˆ๋œ๋‹ค.
  • ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด products ๋ฐฐ์—ด ๋‚ด ๋ฐ์ดํ„ฐ์ˆœ ๊ทธ๋Œ€๋กœ ํ•„ํ„ฐ๋ง๋œ๋‹ค.
  • ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด 6๋งŒ์› ์ดํ•˜ ์ƒํ’ˆ๋“ค๋งŒ ํ•„ํ„ฐ๋ง๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ€๊ฒฉ์— ํ•˜์ด๋ผ์ดํŠธ๋ฅผ ์ฃผ์—ˆ๋‹ค.
$('#filterPrice').click(function(){
  let productsFilter = products.filter(function(item){
    return item.price <= 60000;
  });

  $('#items').html('');

  layout(productsFilter);
  $('.price').css('background','#FFFF9A');
})

 

 

  • filter ํ•จ์ˆ˜๋Š” ํ•„ํ„ฐ๊ฐ€ ์ ์šฉ๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ return ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ๋‹ด์•„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • filter ํ•จ์ˆ˜ ๋‚ด์—๋Š” ์ ์šฉํ•  ์กฐ๊ฑด์„ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๐Ÿ’œ ์ƒํ’ˆ ์ง„์—ด : ์›๋ž˜๋Œ€๋กœ

  • ๊ฐ•์‚ฌ๋‹˜์ด ์›๋ž˜๋Œ€๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด๋ณด๋ผ๊ณ  ํ•˜์‹  ๊ฒŒ ์‹ ์˜ ํ•œ ์ˆ˜์˜€๋‹ค.
  • ์ด ์›๋ž˜๋Œ€๋กœ๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ธฐ ์ „์—๋Š” ๊ฐ ๋ฒ„ํŠผ๋“ค์ด ๋‹ค๋ฅธ ๋ฒ„ํŠผ๋“ค์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์ง€ ๋ชปํ–ˆ๋‹ค.
  • ๊ทผ๋ฐ ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด GIF ์บก์ฒ˜๋ฅผ ํ•˜๋˜ ์ค‘, ๋‹ค๋ฅธ ๋ฒ„ํŠผ๋“ค์„ ๋ˆ„๋ฅด๊ณ ๋‚˜์„œ ์›๋ž˜๋Œ€๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฒซ ํ™”๋ฉด๊ณผ ๋™์ผํ•˜๊ฒŒ ์ƒํ’ˆ๋“ค์ด ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ์ง์ „์— ๋ˆ„๋ฅธ ๋ฒ„ํŠผ์˜ ์ •๋ ฌ ์ƒํƒœ์™€ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.
  • ์›์ธ์€ products ๋ฐฐ์—ด ์ž์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•ด์„œ์˜€๋‹ค.
  • ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค„๊นŒํ•˜๋‹ค๊ฐ€ ๊ทธ๋ƒฅ ๋‹ค๋ฅธ ๋ฒ„ํŠผ๋“ค์€ products ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ๊ฐ ์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ค์–ด๋ฒ„๋ ธ๋‹ค.
$('#revert').click(function(){

  $('#items').html('');
  
  layout(products);
})
  • ๊ทธ๋ž˜์„œ ์›๋ž˜๋Œ€๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด products ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ์ƒํ’ˆ ๋ ˆ์ด์•„์›ƒ์ด ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
728x90
๋ฐ˜์‘ํ˜•