繁体   English   中英

遍历数组项并检查属性值

[英]Iterate over array items and check property value

    function GetViewModelData() {
    var RDcViewModel = [];
    var recordId = $.trim($("#recordId").val());

    for (i = 1; i <= rowCount; i++) {
        var item1 = $.trim($("#item1" + i).val()) == '' ? 0 : parseInt($("#item1" + i).val());
        var item2 = $.trim($("#item2" + i).val()) == '' ? 0 : parseInt($("#item2" + i).val());
        var GrandTotal = (item1 + item2);
        var rdtCViewModel = new ItemDetailsViewModel(0, item1, item2, GrandTotal);
        RDcViewModel.push(rdtCViewModel);
    }

    var obj = new ReportViewModel(recordId, RDcViewModel);
    var viewmodel = JSON.stringify(obj);
    return viewmodel;
}

我有上面的示例函数,我正在使用它来遍历html表行并将行值存储在数组中。

填充阵列后,我将使用以下代码片段将数据发布到控制器。

var PostData = function () {
$(".btnSubmit").click(function () {
    var viewmodel = GetViewModelData();
    //i want to check from here if viewmodel has any item(row) where GrandTotal is 0 (zero)
    $.ajax({
        async: true,
        cache: false,
        contentType: 'application/json; charset=utf-8',
        data: viewmodel,
        headers: GetRequestVerificationToken(),
        type: 'POST',
        url: '/' + virtualDirectory + '/Item/DataSave',
        success: function (data) {
            if (data == true) {
                window.location.href = '/' + virtualDirectory + '/Destination/Index';
            }
        },
        error: function (e) {
            return false;
        }
    });
});

}

我现在要在PostData函数中执行的操作是检查“ viewmodel”对象是否包含“ GrandTotal”为0的任何item(row)。

字符串化后,如果要访问其键和值,现在必须将其解析回:

var PostData = function() {
  $(".btnSubmit").click(function() {
    var viewmodel = GetViewModelData(),
        viewObj = JSON.parse(viewmodel),
        flag = false; // <-----parse it back here

    viewObj.forEach(function(i, el){
        flag = el.GrandTotal === 0;
        return flag;
    });

    if(flag){ return false; }  // <------ and stop it here.


    $.ajax({
      async: true,
      cache: false,
      contentType: 'application/json; charset=utf-8',
      data: viewmodel,
      headers: GetRequestVerificationToken(),
      type: 'POST',
      url: '/' + virtualDirectory + '/Item/DataSave',
      success: function(data) {
        if (data == true) {
          window.location.href = '/' + virtualDirectory + '/Destination/Index';
        }
      },
      error: function(e) {
        return false;
      }
    });
  });
}

使用JSON.parse(viewmodel) ,制备型的对象ReportViewModelRDcViewModel类型的JS阵列ItemDetailsViewModel和叠代以发现任何grandtotal == 0为ItemDetailsViewModel实例

  var viewmodel = GetViewModelData(),
  var obj = JSON.parse(viewmodel);
  var bFoundZero=false;
  $.each(obj.RDcViewModelArray, function(idx, elem){
     if( elem.GrandTotal === 0 ) bFoundZero=true;
  })
  if( bFoundZero ) return 0;

再次没有点迭代数组。 中断GetViewModelData()的循环, GetViewModelData()从该函数返回false。 然后在PostData中进行测试

内部现有的for循环:

var GrandTotal = (item1 + item2);
if(!GrandTotal){
   return false; 
}

然后在PostData()中

var PostData = function () {
$(".btnSubmit").click(function () {
    var viewmodel = GetViewModelData();
    if(viewmodel === false){
      alert('Missing total');
      return; //don't proceed
     }
     /* your ajax */

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM