Jquery中的数组排序问题(按价格排序)

问题描述 投票:0回答:1

我也按价格和字母顺序对商品进行排序。 它按字母顺序排序非常好。它对价格数组进行排序,但不根据排序的价格打印对象。 console.log 中的一切都做得很完美,但是当我选择价格从低到高选项时,它不会对项目进行任何更改,而它是在控制台中制作的。

$(document.body).on('change', '#products-sorting', function() {

  var priceArr = [];
  var nameArr = [];
  for (var i = 0; i < tempArr.length; i++) {
    var price = $(tempArr[i]).find('.addToWishlist').data("price").replace("$", "");
    var name = $(tempArr[i]).find('.addToWishlist').data("name");
    priceArr.push(price)
    nameArr.push(name);
  }
  //sort by Price
  for (var n = 0; n < priceArr.length; n++) {
    for (var i = 0; i < tempArr.length; i++) {
      //sort price low to high
      if ($(this).val() === 'Price, low to high') {
        priceArr.sort(function(a, b) {
          return a - b
        })
      }
      //sort price high to low
      if ($(this).val() === 'Price, high to low') {
        priceArr.sort(function(a, b) {
          return b - a
        })
      }
      var price = $(tempArr[i]).find('.addToWishlist').data("price").replace("$", "");
      if (priceArr[n] == price)
        $("#product-items").append(tempArr[i])
    }
  }
  //console.log(priceArr)
  //sort Alphabetically
  for (var n = 0; n < nameArr.length; n++) {
    for (var i = 0; i < tempArr.length; i++) {
      //sort alphabetically A to Z 
      if ($(this).val() === 'Alphabetically, A to Z')
        nameArr.sort();
      //sort alphabetically Z to A
      if ($(this).val() === 'Alphabetically, Z to A') {
        nameArr.sort();
        nameArr.reverse()
      }
      var name = $(tempArr[i]).find('.addToWishlist').data("name");
      if (nameArr[n] == name)
        $("#product-items").append(tempArr[i])
    }
  }

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="select-box" class="clearfix">
  <label for="products">Sort by</label>
  <select name="products" id="products-sorting">
    <option value="Featured">Featured</option>
    <option value="Alphabetically, A to Z">Alphabetically, A to Z</option>
    <option value="Alphabetically, Z to A">Alphabetically, Z to A</option>
    <option value="Price, low to high">Price, low to high</option>
    <option value="Price, high to low">Price, high to low</option>
  </select>
</div>

javascript jquery arrays sorting
1个回答
0
投票

您不需要在循环内进行排序。只需对

tempArr
进行排序,而不是复制到
priceArr
nameArr
。然后您可以将
tempArr
附加到容器以按排序顺序显示它。

$(document.body).on('change', '#products-sorting', function() {

  function getPrice(el) {
    return parseFloat($(el).find('.addToWishlist').data("price").replace("$", ""));
  }

  function getName(el) {
    return $(el).find('.addToWishlist').data("name");
  }

  switch ($(this).val()) {
    //sort price low to high
    case 'Price, low to high':
      tempArr.sort((a, b) => getPrice(a) - getPrice(b));
      break;
      //sort price high to low
    case 'Price, high to low':
      tempArr.sort((a, b) => getPrice(b) - getPrice(a));
      break;
    case 'Alphabetically, A to Z':
      tempArr.sort((a, b) => getName(a).localeCompare(getName(b)));
      break;
    case 'Alphabetically, Z to A':
      tempArr.sort((a, b) => getName(b).localeCompare(getName(a)));
      break;
  }
  
  $("#product-items").empty().append(tempArr);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="select-box" class="clearfix">
  <label for="products">Sort by</label>
  <select name="products" id="products-sorting">
    <option value="Featured">Featured</option>
    <option value="Alphabetically, A to Z">Alphabetically, A to Z</option>
    <option value="Alphabetically, Z to A">Alphabetically, Z to A</option>
    <option value="Price, low to high">Price, low to high</option>
    <option value="Price, high to low">Price, high to low</option>
  </select>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.