У меня есть два объекта с «запрошенными предметами» и «полученными предметами», где индекс или ключ - это идентификатор предмета. Пример:
Запрошено
Object
4:
article: "Articulo 2B"
measurement_unit: "Metros"
total_quantity: 100
__proto__: Object
5:
article: "Artículo 2C"
measurement_unit: "Metros"
total_quantity: "550.00"
__proto__: Object
__proto__: Object
Получено:
Object
4:
article: "Articulo 2B"
measurement_unit: "Metros"
total_quantity: 20
__proto__: Object
__proto__: Object
С ними я хочу заполнить итоговую таблицу с:
on " название "статьи,
« запрашиваемое количество »каждой статьи,
« полученное количество »,
столбец под названием « уменьшение », который (запрошен - получен)
и другой столбец « процент » (уменьшение х 100 / запрошено).
Проблема возникает, когда есть запрошенный элемент, от которого еще ничего не было получено, потому что в таблице я должен заполнить полученную ячейку 0 и рассчитать уменьшение и процент
Я искал и пытался несколькими способами, но я не получаю это. С помощью этого кода я могу максимально приблизиться к тому, что хочу:
function populateTotalsTable(table, requested, received) {
var rows;
$.each(requested, function (requestedArticle, requestedData) {
var decrease = 0;
var percentaje = 0;
$.each(received, function ( receivedArticle, receivedData ) {
rows += "";
decrease = ( parseInt(requestedData.total_quantity) - parseInt(receivedData.total_quantity) ).toFixed(2);
percentaje = ((decrease * 100) / requestedData.total_quantity).toFixed(2);
if (parseInt(receivedArticle) === parseInt(requestedArticle)) {
rows += "" + requestedData.article + " " +
"" + requestedData.total_quantity + ' ' + requestedData.measurement_unit + " " +
"" + receivedData.total_quantity + ' ' + receivedData.measurement_unit +
" " + "" + decrease + ' ' + requestedData.measurement_unit + " " +
"" + percentaje + "%" + " ";
return;
}
rows += " ";
});
});
table.find('tbody').append(rows);
}
Но результат в таблице выглядит следующим образом:
Как я могу дополнить строку запрошенным предметом, который еще не был получен? Или присвоить 0 (ноль) столбцу, полученному, когда статья не существует в объекте «получено»?
Спасибо!
РЕДАКТИРОВАТЬ:
Мне удалось сделать это с помощью этого кода, но я чувствую, что это не чистый код , и, безусловно, есть какой-то способ сделать лучше, без повторения такого большого количества кода и, если возможно, без вложения each
/ if
...
function populateTotalsTable(table, requested, received) {
var rows;
var requestedQuantity;
var receivedQuantity;
var decrease;
var percentaje;
$.each(requested, function (requestedArticle, requestedData) {
decrease = 0;
percentaje = 0;
requestedQuantity = parseFloat(requestedData.total_quantity).toFixed(2);
$.each(received, function ( receivedArticle, receivedData ) {
receivedQuantity = parseFloat(receivedData.total_quantity).toFixed(2);
rows += "";
if ((receivedArticle) === (requestedArticle)) {
decrease = parseFloat(requestedQuantity - receivedQuantity).toFixed(2);
percentaje = parseFloat((decrease * 100) / requestedQuantity).toFixed(2);
rows += "" + receivedData.article + " ";
rows += "" + requestedQuantity + ' ' + requestedData.measurement_unit + " " +
"" + receivedQuantity + ' ' + receivedData.measurement_unit + " ";
rows += "" + decrease + ' ' + requestedData.measurement_unit + " " +
"" + percentaje + "%" + " ";
}
rows += " ";
});
if (!(requestedArticle in received)) {
decrease = parseFloat(requestedQuantity - 0).toFixed(2);
percentaje = parseFloat((decrease * 100) / requestedQuantity).toFixed(2);
rows += "";
rows += "" + requestedData.article + " ";
rows += "" + requestedQuantity + ' ' + requestedData.measurement_unit + " " +
"" + 0 + ' ' + requestedData.measurement_unit + " ";
rows += "" + decrease + ' ' + requestedData.measurement_unit + " " +
"" + percentaje + "%" + " ";
rows += " ";
}
});
table.find('tbody').append(rows);
}
Чтобы показывать 0, когда поле receivedData.total_quantity
не будет существовать, а именно, это undefined
форма более быстрая, чем со мной случается он:
"<td>" + (receivedData.total_quantity || 0) + ' ' + receivedData.measurement_unit + "</td>"
, Если также ты не хочешь, чтобы появилась единица средства:
"<td>" +(receivedData.total_quantity ? ( receivedData.total_quantity + ' ' + receivedData.measurement_unit) : 0 )+ "</td>"
(receivedData.total_quantity || 0)
, он продолжает меня беря стоимость предыдущего loop и не берет '|| 0'. Я сделал изменение с тем, который я получаю результат, который я хочу, но мне не нравится ничто как " huele" (code smell). Я это поместил в continuació n первоначального вопроса как EDIT, если ты можешь ориентировать меня, как улучшение этого. Привет! – porloscerros Ψ 11.03.2019, 03:04