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()
不复制,您可能需要对象。分配({},源代码)
。