我有一个以下列格式从数据库调用创建的对象:
Object { group1={...}, same=null, group2=null}
我正在尝试获取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();
}
从这里开始,我正在尝试获取same
,group1
,group2
中的项目数量。
这是响应中有多个项目的示例。我可以使用dataObj.group1.length
访问此内容,并返回2
这是正确的。所有我试图找出他只有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,如果是数组则返回实际长度。