Javascript 如何操作对象';将结构转换为';点表示法'-样式数组
我正在使用Meteor进行一个项目,该项目通过Mongoose(使用Meteor.HTTP)连接到一个外部API。我有嵌套对象,其源数据如下所示: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
{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]')