Функция сортировки не работает должным образом после установки getElementById таким образом - PullRequest
1 голос
/ 01 мая 2020

Я новичок, выясняющий свой первый проект, но я не могу получить информацию об этом случае.

Приложение должно получать данные о продукте, его названии, цене, запасе, номере продаж, а затем сортировать их от самых продаваемых к менее продаваемым.

Вот в чем дело, я пытался сократить, насколько многословным был код, поместив этот чанк другим способом

, поэтому я перешел от этого

var balanceVenta = (ev) => {
  ev.preventDefault();

  diseños.sort((a, b) => {
    return (a.ammountSold < b.ammountSold) ? 1 : -1
  });

  document.getElementById("name1").innerHTML = diseños[0].designName;
  document.getElementById("stock1").innerHTML = diseños[0].currentStock;
  document.getElementById("price1").innerHTML = "$" + diseños[0].priceEa;
  document.getElementById("sold1").innerHTML = diseños[0].ammountSold;
  document.getElementById("lastProduction1").innerHTML = diseños[0].productionAmmount;

  document.getElementById("name2").innerHTML = diseños[1].designName;
  document.getElementById("stock2").innerHTML = diseños[1].currentStock;
  document.getElementById("price2").innerHTML = "$" + diseños[1].priceEa;
  document.getElementById("sold2").innerHTML = diseños[1].ammountSold;
  document.getElementById("lastProduction2").innerHTML = diseños[1].productionAmmount;

  document.getElementById("name3").innerHTML = diseños[2].designName;
  document.getElementById("stock3").innerHTML = diseños[2].currentStock;
  document.getElementById("price3").innerHTML = "$" + diseños[2].priceEa;
  document.getElementById("sold3").innerHTML = diseños[2].ammountSold;
  document.getElementById("lastProduction3").innerHTML = diseños[2].productionAmmount;

}

к этому

var index = 0;

var balanceVenta = (ev) => {
  ev.preventDefault();

  diseños.sort((a, b) => {
    return (a.ammountSold > b.ammountSold) ? 1 : -1
  });


  index++;
  var prefixName = "name";
  var prefixStock = "stock";
  var prefixPrice = "price";
  var prefixSold = "sold";
  var prefixLastProd = "lastProduction";

  document.getElementById(prefixName + index).innerHTML = diseños[index - 1].designName;
  document.getElementById(prefixStock + index).innerHTML = diseños[index - 1].currentStock;
  document.getElementById(prefixPrice + index).innerHTML = diseños[index - 1].priceEa;
  document.getElementById(prefixSold + index).innerHTML = diseños[index - 1].ammountSold;
  document.getElementById(prefixLastProd + index).innerHTML = diseños[index - 1].productionAmmount;

}

Все отлично работает, за исключением функции сортировки, которая работала нормально в первой жестко-закодированной версии, но не работала вообще во второй.

Pd: "disños" - массив который содержит объект («disño» без s) внутри каждого индекса с помощью этой функции

let diseños = [];
const addDesign = (ev) => {
    ev.preventDefault();
    let diseño = {
      designName: document.getElementById("textBox1").value,
      currentStock: document.getElementById("textBox2").value,
      productionAmmount: document.getElementById("textBox3").value,
      priceEa: document.getElementById("textBox4").value,
      ammountSold: document.getElementById("textBox5").value

    }
    diseños.push(diseño);
    document.forms[0].reset();

Можете ли вы, ребята, помочь мне разобраться с этим?

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Вы были близки; вам просто нужно поместить код в al oop over diseños. Я также немного упростил логи сортировки c, предполагая, что amountSold - это число. Поменяйте местами a.amountSold и b.amountSold, чтобы изменить восходящий на нисходящий.

var balanceVenta = (ev) => {
  ev.preventDefault();

  diseños.sort((a, b) => a.ammountSold - b.ammountSold);

  var prefixName = "name";
  var prefixStock = "stock";
  var prefixPrice = "price";
  var prefixSold = "sold";
  var prefixLastProd = "lastProduction";

  for (var index = 0; index < diseños.length; index++) {
    var suffix = index + 1;
    document.getElementById(prefixName + suffix).innerHTML = diseños[index].designName;
    document.getElementById(prefixStock + suffix).innerHTML = diseños[index].currentStock;
    document.getElementById(prefixPrice + suffix).innerHTML = diseños[index].priceEa;
    document.getElementById(prefixSold + suffix).innerHTML = diseños[index].ammountSold;
    document.getElementById(prefixLastProd + suffix).innerHTML = diseños[index].productionAmmount;
  }

}
0 голосов
/ 01 мая 2020

создайте объект со всеми необходимыми вам свойствами, а затем запускайте этот метод над массивом вашего объекта каждый раз, когда вы хотите расположить его в порядке

var balanceVenta = diseños.OrderByDescending(x =>x.amountSold).ToList()
...