jQuery - 检查数组是不是为空或具有属性

Posted

技术标签:

【中文标题】jQuery - 检查数组是不是为空或具有属性【英文标题】:jQuery - Checking if array is empty or has attributesjQuery - 检查数组是否为空或具有属性 【发布时间】:2017-08-30 05:29:45 【问题描述】:

我得到一个字符串数组,如果数组有项目我想做一件事,如果没有我想做另一件事。我不确定如何检查数组是否为空。此外,在 chrome 调试器中单步执行我的代码时,即使数组中有项目,长度仍然为 0,所以我不能使用 formErrors.length > 0

这是我获取错误的代码。这工作正常并返回错误字符串数组或空数组:

var formErrors = validateFormData(formData);

function validateFormData(data) 
    var errors = [];

    if (data["title"].length == 0) 
        errors["title"] = "Project title required";
    
    if (data["client"].length == 0) 
        errors["client"] = "Client name required";
    
    if (data["date"].length == 0) 
        errors["date"] = "Date required";
     else if (!isValidDateFormat(data["date"])) 
        errors["date"] = "Date format invalid - Format: dd/mm/yyyy";
    
    if (data["status"] == "") 
        errors["status"] = "Please select current status for this project";
    
    if (data["type"] == "") 
        errors["type"] = "Please select a project type";
    
    if (data["extras"].length == 0) 
        errors["extras"] = "You must select at least one extra for this project";
    

    return errors;

然后,如果没有错误,我想做一件事,如果有错误,我想做另一件事。但这一点对我不起作用。

if (formErrors !== ) 
        displayFormErrors(formErrors);
        event.preventDefault();
    
    else 

        clearForm();
    

我尝试了多种方法,但到目前为止没有任何效果。感谢您的帮助,谢谢!

编辑

我不能在数组上使用 .length,因为即使它有数据,长度也是 0。

Screenshot of chrome debugger

我对人们在问什么感到有些困惑,抱歉,我不是专家,这里是我的完整代码,以便更好地了解我正在尝试做的事情。

$(document).ready(function () 

$('#submit').on("click", onSubmitForm);

function onSubmitForm(event) 
    clearErrorMessages();

    var formData = getFormData();
    var formErrors = validateFormData(formData);

    if (formErrors) 
        displayFormErrors(formErrors);
        event.preventDefault();
    
    else 

        clearForm();

        // Do other stuff

    


function clearForm() 
    $('#title').val("");
    $('#client').val("");
    $('#date').val("");

    $('#status').val("planning");

    $('#description').val("");

    $('.type').prop('checked', false);
    $('.extra').prop('checked', false);

    $('#title').focus();


function clearErrorMessages() 
    $(".uk-text-danger").html("");


function getFormData () 
    var data = [];

    data["title"] = $('#title').val();
    data["client"] = $('#client').val();
    data["date"] = $('#date').val();

    data["status"] = $('select#status option:selected').val();

    data["description"] = $('#description').val();

    if ($("input[name='type']:checked").length > 0) 
        data["type"] = $("input[name='type']:checked").val();
    
    else 
        data["type"] = "";
    

    data["extras"] = [];
    $.each($("input[name='extras[]']:checked"), function(index, radio) 
        data["extras"].push(radio.value);
    );

    return data;


function validateFormData(data) 
    var errors = [];

    if (data["title"].length == 0) 
        errors["title"] = "Project title required";
    
    if (data["client"].length == 0) 
        errors["client"] = "Client name required";
    
    if (data["date"].length == 0) 
        errors["date"] = "Date required";
     else if (!isValidDateFormat(data["date"])) 
        errors["date"] = "Date format invalid - Format: dd/mm/yyyy";
    
    if (data["status"] == "") 
        errors["status"] = "Please select current status for this project";
    
    if (data["type"] == "") 
        errors["type"] = "Please select a project type";
    
    if (data["extras"].length == 0) 
        errors["extras"] = "You must select at least one extra for this project";
    

    return errors;


function displayFormErrors(errors) 
    for (var field in errors) 
        var errorElementId = field + "Error";
        $('#' + errorElementId).html(errors[field]);
    
 );

对不起,如果这太多了,我不知道还能做什么。

【问题讨论】:

只使用 if(array_name.length == 0)/* 做某事 */ 你应该展示一下你的数组是什么样子的。 为什么需要 formerrors 数组?您在数组中插入一个数组,然后检查第二个数组?这没有意义..只需检查错误[] 你不需要 formErrors 我不太确定你在问什么,我已经添加了我所有的代码来尝试更好地理解。 【参考方案1】:

空数组、字符串或对象在 javascript 中是“falsy”。

也就是说,您可以将数组、字符串或对象直接传递到 if 条件中,它会根据是否有东西运行。

if ([]) 
  // this will never run

if ('') 
  // this won't run either

if () 
  // nor will this

【讨论】:

嗯不完全是.. var a = []; a.stg = "something", if (a) console.log("yes") // <- yes; a == true; // <- false a == false // <- true a === false // <- false a === true // <- false a ? true : false // <- true【参考方案2】:

var errors = ;validateFormData function 内。 然后像这样比较对象。

if (JSON.stringify( formErrors ) !== '') //do somethingelse //do something

【讨论】:

这似乎奏效了,但我不确定如何!无论如何谢谢:) 您所做的错误是,您将变量 errors = [] 声明为数组并尝试与这样的对象进行比较 if (formErrors !== )。 您不能像这样比较对象,例如 formErrors !== 而是必须使用 JSON,stringify 将对象转换为字符串。【参考方案3】:

您在哪里验证formErrors 是否为空?这个验证(if-else)应该在提交表单的函数内部。

也尝试使用:

如果 (formErrors.length > 0)

代替:

if (formErrors !== )

【讨论】:

以上是关于jQuery - 检查数组是不是为空或具有属性的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 ViewBag 属性是不是为空或不存在

检查对象中的值是不是为空或空javascript

Vue2将对象作为道具发送到组件为空或具有属性

Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义

如何检查数据读取器是不是为空或为空

检查所有三列是不是不为空或为空