Javascript 变换对象以基于现有关键帧值添加新关键帧

Javascript 变换对象以基于现有关键帧值添加新关键帧,javascript,jquery,arrays,Javascript,Jquery,Arrays,我需要变换此对象: myObject = { "pageName": "home", "dataExtract": "data1|data2=value2|data3=value3|data4=value4a,value4b,value4c"} 对于这一点: myObject_mod = { 'pageName' : 'home', 'dataExtract' : { 'data1' : '', //no value for 'data1' 'data2'

我需要变换此对象:

myObject  = {
"pageName": "home",
"dataExtract": "data1|data2=value2|data3=value3|data4=value4a,value4b,value4c"}
对于这一点:

myObject_mod = {
'pageName' : 'home',
'dataExtract' : {
    'data1'     : '',  //no value for 'data1'
    'data2'     : 'value2',
    'data3'     : 'value3',
    'data4' : {
        'data4key1'     :   'value4a',
        'data4key2'     :   'value4b',
        'data4key3'     :   'value4c'
    }
 }
我首先使用'dataExtract'键,并将其拆分为“|”,因此我将其值拆分为:

myObject.dataExtract.split("|");

(4) ["data1", "data2=value2", "data3=value3", "data4=value4a,value4b,value4c"]

我怎样才能继续

结合使用
Array.split()
Array.reduce()
,以及分解结构,将字符串分解为键和值,并作为对象重新生成:

const对象={
“页面名称”:“主页”,
“dataExtract”:“data1 | data2=value2 | data3=value3 | data4=value4a、value4b、value4c”
}
常数结果={
对象
dataExtract:object.dataExtract.split(“|”)
.减少((r,kv)=>{
常数[键,值='']=kv.split('='))
r[key]=!value.includes(',')?
价值
:
value.split(',).reduce((ra,val,i)=>{
ra[`${key}key${i+1}`]=val;
返回ra;
}, {})
返回r
}, {})
}
console.log(result)
用于为数据提取中的每个条目建立结果对象。一般形式为:

myArray.reduce((resultObject, entryString) => {
  // some logic here
  resultObject[key] = resultValue;
  return resultObject
}, {});
例如:

数组={
“页面名称”:“主页”,
“dataExtract”:“data1 | data2=value2 | data3=value3 | data4=value4a、value4b、value4c”
};
数组_mod={
pageName:array.pageName,
dataExtract:array.dataExtract.split(“|”)reduce((obj,entry)=>{
//处理类似data1的案例
if(entry.indexOf('=')==-1){
obj[输入]='';
返回obj;
}
//处理像data2和data3这样的情况
常量[key,value]=entry.split('=',2);
if(value.indexOf(',')=-1){
obj[键]=值;
返回obj;
}
//处理类似data4的案例
常量值=value.split(',');
obj[key]=values.reduce((o,v,i)=>(o[`${key}key${i+1}`]=v,o),{});
返回obj;
}, {})
};

console.log(数组_mod)
一种替代已发布内容的方法,也可以使用
String.split
Array.reduce

const数组={
“页面名称”:“主页”,
“dataExtract”:“data1 | data2=value2 | data3=value3 | data4=value4a、value4b、value4c”
};
常量数组\u mod={
pageName:array.pageName,
dataExtract:array.dataExtract.split(“|”).reduce((r,cur)=>{
常数[k,v=''']=当前拆分('=',2);
常数vs=v.split(',');
r[k]=vs.length>1?vs.reduce((sr,scur,i)=>(sr[`k}key${i+1}`]=scur,sr),{}):v;
返回r;
}, {})
};
console.log(数组_mod)