У меня есть следующие https://jsfiddle.net/hmv489jd/ JSFiddle и console.log(selectedRows); из следующая функция щелчка печатает объект.

$('#jqxbutton').click(function () {
                var rows = $('#jqxgrid').jqxGrid('getrows');
            
                var selectedRows = rows.filter(x => x.available)
                
              
                for(let i = 0; i < selectedRows.length; i++) {
                    
                    
                    if (selectedRows[i].yeareligible === "N" && selectedRows[i].startyearValue === null && selectedRows[i].endyearValue ===  null ) {
                        selectedRows[i].startyearValue = -1;
                        selectedRows[i].endyearValue = -1;
                    
                    }
                    else if (selectedRows[i].yeareligible === "Y" && selectedRows[i].startyearValue === null && selectedRows[i].endyearValue === null ) {
                        selectedRows[i].startyearValue = '2015';
                        selectedRows[i].endyearValue = '2021';

                     
                    }

                }
                console.log(selectedRows);
                 
                $('#jqxgrid').jqxGrid('clearselection');
                //var selectedRows = $('#jqxgrid').jqxGrid('getselectedrowindex');
                //checkIfThereAreSelectedRows(selectedRows);

            });

Например, если я выберу следующие элементы:

enter image description here

После нажатия кнопки я вижу следующий объект:

[{
  available: true,
  boundindex: 1,
  endyearValue: "2010",
  firstname: "Elio",
  startyearValue: "2012",
  uid: 1,
  uniqueid: "2822-19-21-27-182626",
  visibleindex: 1,
  yeareligible: "Y"
}, {
  available: true,
  boundindex: 3,
  endyearValue: "2013",
  firstname: "Elio",
  startyearValue: "2011",
  uid: 3,
  uniqueid: "2420-19-28-30-241920",
  visibleindex: 3,
  yeareligible: "Y"
}]

Можно ли с помощью javascript проверить startyearValue и endyearValue из каждого массива, и в случае, если startyearValue больше endYearValue, покажите пользователю предупреждение со следующим сообщением:

Alert («У некоторых из выбранных вами год начала больше, чем год окончания, проверьте и убедитесь, что год начала всегда меньше года окончания»)

По сути, я не хочу отправлять этот массив объектов в вызов Ajax, если какой-либо из массивов содержит startyearValue больше endyearValue. Например, в приведенном выше примере первый массив содержит startyearValue 2012 года и endYearValue 2010 года.

1
buildingcode543 6 Окт 2021 в 15:24

3 ответа

Лучший ответ

Да, вы вполне можете это сделать. Все, что вам нужно, это сгенерировать значение дельты (год окончания минус год начала) для каждой записи, используя Array.prototype.map, а затем убедитесь, что это значение дельты всегда имеет положительное значение. Чтобы проверить, соответствуют ли все сгенерированные значения дельты определенному требованию. Array.prototype.every - это хороший кандидат для этого.

Говоря языком кода, это примерно так:

data
    .map(entry => {
        return +entry.endyearValue - +entry.startyearValue;
    })
    .every(delta => {
        return delta > 0;
    });

... который можно легко сжать в однострочник:

data.map(entry => +entry.endyearValue - +entry.startyearValue).every(d => d > 0);

Например, учитывая данные, которые вы указали в своем вопросе:

const exampleData = [{
  available: true,
  boundindex: 1,
  endyearValue: "2010",
  firstname: "Elio",
  startyearValue: "2012",
  uid: 1,
  uniqueid: "2822-19-21-27-182626",
  visibleindex: 1,
  yeareligible: "Y"
}, {
  available: true,
  boundindex: 3,
  endyearValue: "2013",
  firstname: "Elio",
  startyearValue: "2011",
  uid: 3,
  uniqueid: "2420-19-28-30-241920",
  visibleindex: 3,
  yeareligible: "Y"
}];

function areStartAndEndYearsValid(data) {
  return data.map(entry => entry.endyearValue - entry.startyearValue).every(d => d > 0);
}

console.log(areStartAndEndYearsValid(exampleData));
1
Terry 6 Окт 2021 в 12:33

Что-то вроде этого

  const rows = $('#jqxgrid').jqxGrid('getrows');

  rows.filter(x => x.available).forEach(row => {
    const eligible = row.yeareligible === "Y"
    const areNull = row.startyearValue === null && row.endyearValue === null
    row.startyearValue = eligible && areNull ?  '2015' : -1;
    row.endyearValue = eligible && areNull ? '2021' : -1;
    if (row.startyearValue  > row.endyearValue) {
      alert("Warning: Start is greater than end year")
    }
  }
1
mplungjan 6 Окт 2021 в 12:35

Перейдите по этой ссылке и проверьте ответ на selftaught91

В этом ответе вы можете добавить if check => if days is больше нуля, что означает, что startdate больше, чем enddate с moment.js, вы можете получить такую ​​функциональность, а затем использовать цикл для проверки массива, поле которого `` отмечено ''

-1
stack overflow 6 Окт 2021 в 12:40