Javascript 如何操作对象';将结构转换为';点表示法'-样式数组

Javascript 如何操作对象';将结构转换为';点表示法'-样式数组,javascript,node.js,meteor,Javascript,Node.js,Meteor,我正在使用Meteor进行一个项目,该项目通过Mongoose(使用Meteor.HTTP)连接到一个外部API。我有嵌套对象,其源数据如下所示: {name: "asdasd", active: true, status: Object, domain: "asdas", category: "1"…} Paths.0: "asdkmalksmdasd", Paths.1: "asdasdad", 我需要以以下格式发布/放置数据: { active: true, categ

我正在使用Meteor进行一个项目,该项目通过Mongoose(使用Meteor.HTTP)连接到一个外部API。我有嵌套对象,其源数据如下所示:

{name: "asdasd", active: true, status: Object, domain: "asdas", category: "1"…}
  Paths.0: "asdkmalksmdasd",
  Paths.1: "asdasdad",
我需要以以下格式发布/放置数据:

{
  active: true,
  category: "1",
  contact.companyName: "asd",
  contact.email: "asd",
  contact.managerName: "asd",
  contact.phone: "asd",
  domain: "asdasd",
  name: "asjdnas",
  ImagePaths: ["asdasdad","asdasdAsd"],
}
无嵌套样式对象,或任何类型的:

ImagePaths[0] : asdasdad,
ImagePaths[1] : asdasdad

sites: 
   0: "565f1c7da35dcaa718713f4f"
等等。我找到了这个代码(通过@rhalff)

但我在数组方面仍然有问题。他们是这样出现的:

{name: "asdasd", active: true, status: Object, domain: "asdas", category: "1"…}
  Paths.0: "asdkmalksmdasd",
  Paths.1: "asdasdad",
我需要的是:

Paths:["asdkmalksmdasd","asdasdad"];
您可以在jsbin上播放:


如何实现这一点?

我在代码中添加了一个
if语句

var dotize = dotize || {};

dotize.parse = function(jsonobj, prefix) {
  var newobj = {};
  function recurse(o, p) {
    for (var f in o)
    {
      var pre = (p === undefined ? '' : p + ".");
      if(o[f] && o[f].length){
        newobj[f] = o[f];
      }
      else if (o[f] && typeof o[f] === "object"){
        newobj = recurse(o[f], pre + f);
      } 
      else {
        newobj[pre + f] = o[f];
      }
    }
    return newobj;
  }
  return recurse(jsonobj, prefix);
};

var mydata = '{"name":"asjdnas","active":true,"status":{"pending":true,"comment":"asdasd"},"domain":"asdasd","category":"1","contact":{"companyName":"asd","managerName":"asd","phone":"asd","email":"asd"},"server":{"os":"akjsdn"},"Paths":["asdkmalksmdasd","asdasdad"]}';


mydata = JSON.parse(mydata);
mydata = dotize.parse(mydata);
console.log(mydata);

if(o[f] && o[f].length){
    newobj[f] = o[f];
}

问题是由
ImagePaths
属性引起的?
if(Object.prototype.toString.call(o[f])==='[Object Array]')