Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将对象转换为自定义格式的数组_Javascript_Arrays_Node.js - Fatal编程技术网

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 } }

这是我的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
     }
  }
}
我需要将此对象转换为以下格式的数组

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]}它可以工作,但是对于对象,您没有对象的信息。您的答案是正确的,但我有另一个问题,是否有办法将此数组还原为转换前的对象?您可以使用四个连续项读取数组,其中包含信息和生成,取决于数组、对象或某些值属性的类型。继续操作,直到所有项目都使用完毕。如果你自己尝试一下,如果你有问题的话,问一个新问题,这会更容易。