[TIL]昇順ソート(sort)とフィルタ条件(フィルタ)
25717 ワード
Javascriptを使用して各Tagを生成し、レイアウトでobject要素for文を使用してWebページをレンダリングします.
また,sort法とfilter法を用いて条件並べ替えとフィルタリングを実現した.
<div class="btnContainer my-4">
<button class="btn btn-danger" id="sortPrice">가격순정렬</button>
</div>
<div class="btnContainer2 my-4">
<button class="btn btn-danger" id="filterBtn">필터</button>
</div>
///서버가 보낸 쇼핑몰 상품데이터라고 가정
let products = [
{ price: 40000, title: "souffle", img: "0.png" },
{ price: 70000, title: "Caramel Macchiato", img: "1.png" },
{ price: 50000, title: "Fruit ice", img: "2.png" },
{ price: 60000, title: "Donuts", img: "3.png" },
{ price: 40000, title: "Tart", img: "4.png" },
{ price: 30000, title: "pancake", img: "5.png" },
];
製品をWebページにレンダリングする
まず、各オブジェクトに複文でラベルを貼り、ラベルにテキストを書きます.
Tagにテキストを入れ、appendChildメソッドを使用して親ラベルに貼り付けます.
for (let i = 0; i < products.length; i++) {
products[i].id = i;
const cardContainer = document.getElementById("cardContainer");
const card = document.createElement("div");
card.className = "card";
const img = document.createElement("img");
img.className = "이미지";
img.src = `./img/${products[i].img}`;
const cardBody = document.createElement("div");
cardBody.className = "card-body";
const title = document.createElement("h5");
title.className = "title";
title.innerText = products[i].title;
const price = document.createElement("p");
price.className = "price";
price.innerText = products[i].price;
const btn = document.createElement("button");
btn.className = "btn btn-danger";
btn.innerText = "주문하기";
cardBody.appendChild(title);
cardBody.appendChild(price);
cardBody.appendChild(btn);
card.appendChild(img);
card.appendChild(cardBody);
cardContainer.appendChild(card);
}
ウィットガーが完成したら?<div class="cardContainer">
<div class="card">
<div class="cardBody">
<h5 class="title"></h5>
<p class="price"></p>
<button class="btn btn-danger"></button>
</div>
</div>
</div>
🔼 昇順に並べる
sort()は、文字列を比較し、Unicode値の順にソートする方法です.数値で並べ替えたい場合は、2つのパラメータ
a와b
を受け入れて比較します.回
양수
,a右b左揃え,回음수
,a左b右揃え.sort法を用いて配列を含む製品配列を並べ替え、
price
に近いa.price - b.price
を行った.これで自動的に昇順に並べ替えられます!(上記の概念を参照)
次に、eq(index)メソッドを使用して、対応する要素を繰り返し文としてインポートします.インポートされた要素
title,img,price
はhtml()を順次使用してバインドされる.🖱 attr()を使用して画像をソートする方法
$(「選択者」)です.attr(「src」、「画像パス」);
$("#sortPrice").click(function () {
products.sort(function (a, b) {
return a.price - b.price;
});
for (let i = 0; i < products.length; i++) {
$(".title").eq(i).html(products[i].title);
$(".이미지").eq(i).attr("src", `./img/${products[i].img}`);
$(".price").eq(i).html(products[i].price);
}
});
インプリメンテーション
🅿 ろ過条件
forEachを用いてアレイ内の各オブジェクトを順次遍歴し,if条件文によりフィルタを実現した.
priceクラスをインポートし、コンソールで確認することで、HTML CollectION形式であることを確認できます.
これをarrayに変換するために
Array.from()
メソッドを使用し、forEachメソッドを使用してarrayに変換したprice taegerをforEachメソッドに変換した. $("#filterBtn").click(() => {
const price = document.getElementsByClassName("price");
Array.from(price).forEach((item) => {
});
});
パラメータとしてprice(クラス名)がpラベルとして出力されていることがわかります.
ここから、pバーのtextをインポートするには、
innerText
を使用する必要があることがわかります.
if (
item.innerText < 50000 &&
item.parentElement.parentElement.className !== "card hidden"
) {
item.parentElement.parentElement.className = "card hidden";
} else {
item.parentElement.parentElement.className = "card";
}
item.innerText
50000元未満で、&card hidden
クラス名ではない場合はcard hiddenクラスを追加します.そうでなければ、レベルをカードに変えます.
🤷♀️ フィルタ条件は50000元未満のようですが、&&演算子を使ってカードを隠すか否かを判別し、フィルタリングしました!
フィルターを実施する場合、filterメソッドを使うべきでしょうか?そしてやってみます.filterは新しい配列を作成し、この新しい配列で条件を更新するには、現在出力されている配列と比較し、コードを非常に複雑にする必要があります.🤦♀️
インプリメンテーション
Reference
この問題について([TIL]昇順ソート(sort)とフィルタ条件(フィルタ)), 我々は、より多くの情報をここで見つけました https://velog.io/@duswn38/TIL-오름차순정렬sort와-조건필터하기filterテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol