дать значение по умолчанию для объекта, который не существует в другом объекте с jquery?

У меня есть два объекта с «запрошенными предметами» и «полученными предметами», где индекс или ключ - это идентификатор предмета. Пример:

Запрошено

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);
}

Но результат в таблице выглядит следующим образом:

introducir la descripción de la imagen aquí

Как я могу дополнить строку запрошенным предметом, который еще не был получен? Или присвоить 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);
}

1
задан 11.03.2019, 02:53
1 ответ

Чтобы показывать 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>"
0
ответ дан 27.10.2019, 03:02
  • 1
    спасибо за твой вклад! Ло probé и не я funcionó не sé из-за qué razó n, когда я пишу (receivedData.total_quantity || 0), он продолжает меня беря стоимость предыдущего loop и не берет '|| 0'. Я сделал изменение с тем, который я получаю результат, который я хочу, но мне не нравится ничто как " huele" (code smell). Я это поместил в continuació n первоначального вопроса как EDIT, если ты можешь ориентировать меня, как улучшение этого. Привет! –  porloscerros Ψ 11.03.2019, 03:04