Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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_Angularjs - Fatal编程技术网

Javascript 映射对象更改对象数组

Javascript 映射对象更改对象数组,javascript,angularjs,Javascript,Angularjs,在角度应用程序中,我有以下对象和一系列要求: var source = { position: "xyz", requirements: [ { a: { code: "a1", name: "a1" }, b: { code: "b1", name: "b1" } }, { a: { code: "a2", name: "a2" }, b: { code: "b2", name: "b2" } } ] }; 我需要创建此对象的副本,如下所示: var target

在角度应用程序中,我有以下对象和一系列要求:

var source = {
  position: "xyz",
  requirements: [
    { a: { code: "a1", name: "a1" }, b: { code: "b1", name: "b1" } },
    { a: { code: "a2", name: "a2" }, b: { code: "b2", name: "b2" } }
  ]
};
我需要创建此对象的副本,如下所示:

var target = {
  position: "xyz",
  requirements: [
    { acode: "a1", bcode: "b1" },
    { acode: "a2", bcode: "b2" }
  ]
};
所以只会选择“a”代码和“b”代码

映射此类对象的最佳方法是什么?

在这种情况下,您可以使用“复制”对象。然后只需映射
需求

var源={
位置:“xyz”,
要求:[
{a:{代码:“a1”,名称:“a1”},b:{代码:“b1”,名称:“b1”},
{a:{代码:“a2”,名称:“a2”},b:{代码:“b2”,名称:“b2”}
]
};
var copy=Object.assign({},source);
copy.requirements=copy.requirements.map(项=>{
返回{acode:item.a.code,bcode:item.b.code}
});
console.log(源代码);
控制台日志(副本)在这种情况下,您可以使用“复制”对象。然后只需映射
需求

var源={
位置:“xyz”,
要求:[
{a:{代码:“a1”,名称:“a1”},b:{代码:“b1”,名称:“b1”},
{a:{代码:“a2”,名称:“a2”},b:{代码:“b2”,名称:“b2”}
]
};
var copy=Object.assign({},source);
copy.requirements=copy.requirements.map(项=>{
返回{acode:item.a.code,bcode:item.b.code}
});
console.log(源代码);

控制台日志(副本)您可以简单地循环并执行此操作

var source = {
  position: "xyz",
  requirements: [
    { a: { code: "a1", name: "a1" }, b: { code: "b1", name: "b1" } },
    { a: { code: "a2", name: "a2" }, b: { code: "b2", name: "b2" } }
  ]
};

var target ={};
var innerArray = [];
for(var key in source) {
  if (source.hasOwnProperty(key)) {
    if(typeof source[key] === 'string') {
       target[key] = source[key];   
    } else {
      for(var i = 0; i < source[key].length; i++) {
        var temp = {};
        temp.acode = source[key][i].a.code;
        temp.bcode = source[key][i].b.code;
        innerArray.push(temp);
      }
      target[key] = innerArray;    
    }
  }
}

console.log(target);
var源={
位置:“xyz”,
要求:[
{a:{代码:“a1”,名称:“a1”},b:{代码:“b1”,名称:“b1”},
{a:{代码:“a2”,名称:“a2”},b:{代码:“b2”,名称:“b2”}
]
};
var target={};
var innerArray=[];
for(源中的var键){
if(source.hasOwnProperty(key)){
if(源[键]的类型=='string'){
目标[键]=源[键];
}否则{
对于(var i=0;i
这是小提琴

您可以简单地循环并执行此操作

var source = {
  position: "xyz",
  requirements: [
    { a: { code: "a1", name: "a1" }, b: { code: "b1", name: "b1" } },
    { a: { code: "a2", name: "a2" }, b: { code: "b2", name: "b2" } }
  ]
};

var target ={};
var innerArray = [];
for(var key in source) {
  if (source.hasOwnProperty(key)) {
    if(typeof source[key] === 'string') {
       target[key] = source[key];   
    } else {
      for(var i = 0; i < source[key].length; i++) {
        var temp = {};
        temp.acode = source[key][i].a.code;
        temp.bcode = source[key][i].b.code;
        innerArray.push(temp);
      }
      target[key] = innerArray;    
    }
  }
}

console.log(target);
var源={
位置:“xyz”,
要求:[
{a:{代码:“a1”,名称:“a1”},b:{代码:“b1”,名称:“b1”},
{a:{代码:“a2”,名称:“a2”},b:{代码:“b2”,名称:“b2”}
]
};
var target={};
var innerArray=[];
for(源中的var键){
if(source.hasOwnProperty(key)){
if(源[键]的类型=='string'){
目标[键]=源[键];
}否则{
对于(var i=0;i
这是小提琴

.map(x=>{acode:x.a.code,bcode:x.b.code})
.map(x=>{acode:x.a.code,bcode:x.b.code})
我需要用新格式创建源代码(例如目标代码)的副本。不更改源。这是我正在以所需格式将目标发送到API,但不想更改客户端使用的格式。@MiguelMoura,很抱歉我错过了这个案例。我已将答案更新为“复制”原始对象。仅使用“var copy=source”不会与对象相同。创建?不,执行
var copy=source
将不起作用,因为
copy
将指向与
source
相同的内存块。这意味着对
copy
的任何更改都将反映在
源代码中。
对象。create()
不复制,您可能需要
对象。分配({},源代码)
。我需要创建源代码的副本,例如,具有新格式的目标。不更改源。这是我正在以所需格式将目标发送到API,但不想更改客户端使用的格式。@MiguelMoura,很抱歉我错过了这个案例。我已将答案更新为“复制”原始对象。仅使用“var copy=source”不会与对象相同。创建?不,执行
var copy=source
将不起作用,因为
copy
将指向与
source
相同的内存块。这意味着对
copy
的任何更改都将反映在
源代码中。
对象。create()
不复制,您可能需要
对象。分配({},源代码)