我怎样才能获得"类型"集合中的每个属性?

时间:2016-04-01 06:30:22

标签: javascript

是否有一个JS库会告诉我集合中每个属性的类型?

我有一个对象数组,这是SQL数据库查询的结果。

数据如下所示:

[{
  id: "1",
  email: "donnyp@gmail.com",
  is_subscribed: null,
  name: "Don P",
  created_at: "2015-01-18 18:16:32"
},
{
  id: "2",
  email: "test@test.com",
  is_subsribed: "t",
  name: "Test Guy",
  created_at: "2015-01-30 12:05:55"
},
...]

我想要一个对象告诉我每个"列的类型"。像这样:

{
  id: "integer",
  email: "string",
  is_subscribed: "boolean",
  name: "string",
  created_at: "datetime"
}

编辑:这不像做typechecks那么简单。我在这里遇到的主要问题是所有值都是字符串,除了空值。这意味着我必须尝试将整个列强制转换为类型,然后检查该类型是否为整数。对我要检查的每种类型重复此操作。所以我将(要测试的类型数量)X(对象数量)X(列数#),这是很多要计算的,所以如果有更聪明的方式我会喜欢这样做。

编辑2 :如果您对某个问题进行了投票,请发表评论解释为什么作者可以改进问题。即使某些事情对你很明显,也可能不是作者(在这种情况下......我:P)。

1 个答案:

答案 0 :(得分:1)

以下是使用JSON.parsetypeof识别类型的简单示例:

var o={
  id: "1",
  email: "donnyp@gmail.com",
  is_subscribed: null,
  name: "Don P",
  created_at: "2015-01-18 18:16:32"
};
for(var it in o){ var v=o[it];
  try{v=JSON.parse(v);}catch(y){} //try to turn strings into literals
  if(!+v && Date.parse(v)){ v="date"; }else{ v=typeof v;} // find date strings (json encoded), not numbers
  if(v=="object" && Array.isArray(o[it])) v="array"; // [] vs {}
  if(v=="object" && !o[it]) v="null"; // null is and Object (doh!)
  o[it]=v;
}

o;/*  ~== {
  "id": "number",
  "email": "string",
  "is_subscribed": "null",
  "name": "string",
  "created_at": "date"
};*/

它非常接近你的示例输出,但使用JS类型而不是SQL类型,JS无法从JSON实际确定,因为JSON使int这样的特定数字类型不明确。