Javascript / jQuery未定义的对象长度

时间:2016-08-01 15:58:33

标签: javascript jquery arrays object

我有一个以下列格式从数据库调用创建的对象:

Object { group1={...},  same=null,  group2=null}

enter image description here

我正在尝试获取group1,group2中相同的项目数。

我通过控制台访问它,如下所示:

dataObj.group1.length

在上图中,返回undefined。但是,如果group1中有多个项目,则返回计数就好了。当对象/数组中有单个项目时,它似乎只会导致问题。

是否有可用于解释这些可能性的函数并返回上述那些对象中的length个项目?

更新

这就是我创建数据的方式:

success: function(data) {

        // Define our data response
        var d = data.data;

        // Push our data to an object
        dataObj = {
            same: (d.same ? d.same.tools : null),
            group1: (d.group1 ? d.group1.tools : null),
            group2: (d.group2 ? d.group2.tools : null)
        }

        // Render our table
        renderCompare();
    }

从这里开始,我正在尝试获取samegroup1group2中的项目数量。

这是响应中有多个项目的示例。我可以使用dataObj.group1.length访问此内容,并返回2这是正确的。所有我试图找出他只有1结果时如何处理这个问题。 enter image description here

1 个答案:

答案 0 :(得分:2)

在我的头变成一块木头之后,正确地向我解释了这个问题后,它只是一个覆盖不测事件的案例。正如@KevinB正确指出的那样,你应该真正清理响应数据,这样它总是返回一个对象数组,即使它只有一个对象甚至没有对象。这就是造成问题的原因。

如果您收到此回复......

{
    group1: { tool: 244, toolName: "blueprint" },
    group2: null,
    same: null
}

然后group1是一个对象,而不是一个数组,因此没有length属性。但是,如果你得到这个回应......

{
    group1: [{ tool: 244, toolName: "blueprint" }],
    group2: null,
    same: null
}

然后group1将保存完全相同的数据,但它将是一个数组,因此具有length属性。

我建议的是一个简单的函数来评估对象并返回预期的响应,就像这样......

function getLength(obj) {
    if (obj == null) return 0;
    if (obj.length == undefined) return 1;
    return obj.length;
}

在您的示例中,您将使用getLength(dataObj.group1)并返回1.如果为null,则返回0,如果是数组则返回实际长度。