Javascript 如何将对象转换为自定义格式的数组
这是我的javascript对象Javascript 如何将对象转换为自定义格式的数组,javascript,arrays,node.js,Javascript,Arrays,Node.js,这是我的javascript对象 { username: 'hamet', weight: 75, active: false, data: { interestedIn: ['internet', 'ping pong'], anotherArr: [{data: [1,2,3] }], anotherObj: { // and another obj or array or any type of field } }
{
username: 'hamet',
weight: 75,
active: false,
data: {
interestedIn: ['internet', 'ping pong'],
anotherArr: [{data: [1,2,3] }],
anotherObj: {
// and another obj or array or any type of field
}
}
}
我需要将此对象转换为以下格式的数组
let arr = [
'username', 'hamet', 'username_type', 'string',
'weight', '75', 'weight_type', 'number',
'active', 'true', 'active_type', 'boolean',
'data.interestedIn', 'array', 'data.interestedIn_type', 'array',
'data.interestedIn.0', 'internet', 'data.interestedIn.0_type','string',
'data.interestedIn.1', 'ping pong', 'data.interestedIn.1_type','string',
'data.anotherArr', 'array', 'data.anotherArr_type', 'array',
'data.anotherArr.0.data', 'array', 'data.anotherArr.0.data_type','array',
'data.anotherArr.0.data.0', '1', 'data.anotherArr.0.data.0_type','number',
// ...
]
我也需要这种类型的数组来使用命令在redis中保存数据
我不会对整个文档使用JSON.stringify
坏消息是,没有一个字段具有常量数据类型的常量值,
可能有一个对象进入对象进入对象。您可以使用它来获取对象中所有键的列表。然后,将其与结合起来,以确定值的类型
差不多
var output = [];
Object.keys(yourObject).forEach(function(key) {
output.push(key);
output.push(yourObject[key]);
output.push(key + '_type');
output.push(typeof yourObject[key]);
});
当遇到数组作为值时,需要做一些不同的事情。那就交给你了 通过迭代属性并收集嵌套属性和值,可以使用迭代和递归方法
函数getKeysValues(对象){
功能iter(o,p){
Object.keys(o).forEach(函数(k){
var path=(p.concat(k)).join('.'),
type=Array.isArray(o[k])&&“Array”| | typeof o[k];;
if(o[k]&&typeof o[k]=“object”){
结果.推送(路径,类型,路径+“_类型”,类型);
返回iter(o[k],p.concat(k));
}
结果.推送(路径,o[k],路径+“_类型”,类型);
});
}
var结果=[];
国际热核实验堆(对象,[])
返回结果;
}
var object={username:'hamet',weight:75,active:false,data:{internetin:['internet','ping pong'],anotherArr:[{data:[1,2,3]}],anotherObj:{foo:'bar'}};
log(getKeysValues(object))代码>
.as控制台包装{max height:100%!important;top:0;}
可以使用递归和在Object.keys()上迭代是的,object.keys是可能的,但主要的问题是如何转换为该格式的数组?因此,当我遇到object of object或任何其他困难的数据类型时,我应该怎么做?@HametGholizadeh最简单的方法是使用递归。生成类似于processObject
,processArray
,processValue
的函数,然后委托给那些如果(您的对象[key]instanceof Object){…}
顺便说一句,您得到的是对象而不是数组的对象,如您的示例所示。您仅为数组获取数组。您的意思是此代码不适用于此类型的数据吗?=>obj:{data:[1,2,3]}它可以工作,但是对于对象,您没有对象的信息。您的答案是正确的,但我有另一个问题,是否有办法将此数组还原为转换前的对象?您可以使用四个连续项读取数组,其中包含信息和生成,取决于数组、对象或某些值属性的类型。继续操作,直到所有项目都使用完毕。如果你自己尝试一下,如果你有问题的话,问一个新问题,这会更容易。