Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Object_Urlsearchparams - Fatal编程技术网

Javascript 从查询参数对象获取对象数组

Javascript 从查询参数对象获取对象数组,javascript,arrays,object,urlsearchparams,Javascript,Arrays,Object,Urlsearchparams,我有一个带有queryparams键和值的对象,例如: const params = { 'filter[0][key]': 'name', 'filter[0][operator]': 'like', 'filter[0][value]': 'test', 'filter[1][key]': 'age', 'filter[1][operator]': '=', 'filter[1][value]': '21

我有一个带有queryparams键和值的对象,例如:

 const params = {
      'filter[0][key]': 'name',
      'filter[0][operator]': 'like',
      'filter[0][value]': 'test',
      
      'filter[1][key]': 'age',
      'filter[1][operator]': '=',
      'filter[1][value]': '21'
    }
我需要从中获得一个对象数组,如下所示:

const filter = [
  {
    key: 'name',
    operator: 'like',
    value: 'test'
  },
  {
    key: 'age',
    operator: '=',
    value: '21'
  }
]

如果只有3个级别,这应该可以工作

const参数={
“筛选器[0][key]:“name”,
“筛选器[0][operator]”:“类似”,
“筛选器[0][value]”:“测试”,
“筛选器[1][key]:“年龄”,
“筛选器[1][operator]”:“=”,
“筛选器[1][值]”:“21”
}
const result={};
for(参数中的常量键){
const[[,…splits]]=[…key.matchAll(/(\w+)\[(\w+)]\[(\w+)]\[(\w+)]/g)];//使用解构来挑选密钥的匹配组。
结果[splits[0]]??=isNaN(+splits[1])?{}:[];//如果下一个键是数字,则此对象应为数组,如果不是,则应为对象
结果[splits[0]][splits[1]]??=isNaN(+splits[2])?{}:[];
结果[splits[0]][splits[1]][splits[2]]=params[key];
}
console.log(result.filter)这也可以

const参数={
“筛选器[0][key]:“name”,
“筛选器[0][operator]”:“类似”,
“筛选器[0][value]”:“测试”,
“筛选器[1][key]:“年龄”,
“筛选器[1][operator]”:“=”,
“筛选器[1][值]”:“21”
}
常量键=对象键(参数)
var res=键。reduce(函数(r,a){
r[a[7]]=r[a[7]| |[];
温度=一片(10,-1);
r[a[7]].push({[temp]:params[a]});
返回r;
},Object.create(null));
常量过滤器=[]
for(变量k,单位为res){
filter.push(Object.assign({},…res[k]))
}   

log(filter)
声明方式,应该适用于任意数量的键和项 (不适用于嵌套对象):

const参数={
“筛选器[0][key]:“name”,
“筛选器[0][operator]”:“类似”,
“筛选器[0][value]”:“测试”,
“筛选器[1][key]:“年龄”,
“筛选器[1][operator]”:“=”,
“筛选器[1][value]:“21”,
“筛选器[2][key]:“A”,
“筛选器[2][运算符]:“B”,
“筛选器[2][值]”:“C”
}
常量项=对象项(参数)
常量allKeys=items.map(e=>e[0]。替换(/(.*)\[(.*)\]/,“$2”)
const uniqueKeys=[…新集合(所有键)]
const resLen=items.length/uniquekey.length
const res=Array.from({length:resLen},(z,i)=>
唯一键。减少((acc,e,j)=>{
acc[e]=项目[resLen*i+j][1]
返回acc
}, {}))

log(res)
假设我们有这样一个输入<代码>'obj[deep][0][soDeep][prop][0]'='Value'
,那么您的输出是什么?