将JavaScript多维对象转换为平面数组
我有这个javascript对象格式将JavaScript多维对象转换为平面数组,javascript,object,Javascript,Object,我有这个javascript对象格式 { "draw": "", "columns": [ { "data": "userid", "name": "", "searchable": true, "search": { "value": "", "regex": false } } ] } 我需要做的是把它转换成一维物体 { "draw" : "", "columns[
{
"draw": "",
"columns": [
{
"data": "userid",
"name": "",
"searchable": true,
"search": {
"value": "",
"regex": false
}
}
]
}
我需要做的是把它转换成一维物体
{
"draw" : "",
"columns[data]": "userid",
"columns[name]": "",
"columns[searchable]": "true",
"columns[searchable][value]": "",
"columns[searchable][regex]":"true"
}
主对象可以是多层,包含对象和数组
由于JS不是我的强项,所以我非常欣赏任何想法和建议 我认为您希望从
列中删除数组,并将其设置为0索引值
let测试={
“绘制”:“绘制”,
“栏目”:[
{
“数据”:“用户ID”,
“名称”:“,
“可搜索”:正确,
“搜索”:{
“价值”:“,
“regex”:假
}
}
]
}
test.columns=test.columns[0]
log(test)
我将使用一个递归函数,该函数接受原始对象的属性和该对象的路径。如果属性不是对象,则将值添加到路径,如果是,则迭代其属性并调用递归函数
var对象={
“绘制”:“绘制”,
“栏目”:[{
“数据”:“用户ID”,
“名称”:“,
“可搜索”:正确,
“搜索”:{
“价值”:“,
“regex”:假
}
}]
};
console.log(展平(对象));
函数展平(对象){
var result={};
内部展平(对象“”);
返回结果;
函数InnerFlant(对象、路径){
if(typeof object!==“object”| | object===null | | object instanceof Date)返回结果[path]=object;
如果(!Object.keys(Object.length)返回结果[path]=Object;
for(对象中的变量键){
InnerFlatte(对象[键],路径?(路径+“[”+键+“]”:键);
}
}
}
结果不应该是列[0][searchable][regex]:
而不是列[searchable][regex]
?这不是一个XY问题吗?你为什么要做这件事?在我看来,这可能是一个试图解决一些你没有告诉我们的其他问题的方法。在得到一个只有一个级别的对象后,你会怎么做?为什么没有数组的索引?你怎么知道原始数据来自一个数组?这不是OP的意思wants@ThumChoonTat好的,我想删除我的答案,虽然我的帐户是客人,所以我可以谢谢。我用了你的一些逻辑和这个参考。在此处创建了此答案的另一个版本