Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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_Object - Fatal编程技术网

Javascript 将对象格式化为嵌套字段

Javascript 将对象格式化为嵌套字段,javascript,object,Javascript,Object,我使用for循环迭代两个数组并生成一个对象。这是可行的,但我需要一个稍微不同格式的最终对象 首先,下面是迭代数组并形成我的对象的代码: differences: [ { kind: 'N', path: ['id_number'], rhs: '1' }, { kind: 'N', path: ['person_firstname'], rhs: 'x1' }, { kind: 'N', path: ['person_lastname'], rhs: 'x2' } ]

我使用for循环迭代两个数组并生成一个对象。这是可行的,但我需要一个稍微不同格式的最终对象

首先,下面是迭代数组并形成我的对象的代码:

differences:
   [ { kind: 'N', path: ['id_number'], rhs: '1' },
     { kind: 'N', path: ['person_firstname'], rhs: 'x1' },
     { kind: 'N', path: ['person_lastname'], rhs: 'x2' } ]

mappings: [ { lhs: 'name.first', rhs: 'person_firstname' },
  { lhs: 'name.last', rhs: 'person_lastname' },
  { lhs: 'name.middle', rhs: 'person_middlename' } ]

  let outResult = {};

  for (let diff of differences) {
    for (let mapping of mappings) {
      if (diff.path[0] === mapping.rhs) {
        p = mapping.lhs;
        v = diff.rhs;
        outResult[p] = v;
      }
    }
  }
这给了我一个物体,看起来像这样:

{ name.first: 'x1', name.last: 'x2' }
我需要适合我的模型的格式应该是:

name: {
    first: "x1",
    last: "x2"
  }
};

我可以在这里使用什么操作来按我需要的方式格式化此属性?

您可以获取所需属性的路径,将其拆分并将值分配给最新的对象

//instead of 
outResult[p] = v;

// take
setValue(outResult, p, v);
函数设置值(对象、路径、值){
var keys=path.split('.'),
last=keys.pop();
reduce((o,k)=>o[k]=o[k]| |{},object)[last]=value;
}
变量差异=[{kind:'N',路径:['person_firstname'],rhs:'1'},{kind:'N',路径:['person_lastnam'],rhs:'testing1'},{kind:'N',路径:['id_number'],rhs:'tseting2'},
映射=[{lhs:'name.first',rhs:'person_firstname'},{lhs:'name.last',rhs:'person_lastname'},{lhs:'name.middle',rhs:'patient_middlename'},
outResult={};
对于(让差异之差){
for(让映射映射){
if(diff.path[0]==mapping.rhs){
设置值(outResult、mapping.lhs、diff.rhs);
}
}
}

console.log(outResult)
请同时添加数据。是否要查找类似的内容?看起来像
p
是包含
名称的字符串。first
。你不能只使用
outResult[p.split('..')[1]]=v
?或者是否有更多可能的
?上面已经添加了阵列数据。