如何从对象数组中删除属性?
问题描述:
我想从对象数组中删除一个属性。如何从对象数组中删除属性?
export class class1 {
prop1: string;
prop2: string;
prop3: string;
}
export class class2 {
myprop = [
{ prop1:'A', prop2:"1", prop3:"descr1" },
{ prop1:'B', prop2:"2", prop3:"descr2" },
{ prop1:'C', prop2:"3", prop3:"descr3" },
];
get(): class1[] {
return this.myprop ;
}
add(value: class1): void {
this.myprop.push(value);
}
}
var var1 = class2.get();
var var2 =
我想var2包含这样的东西。
[
{ prop1:'A', prop3:"descr1" },
{ prop1:'B', prop3:"descr2" },
{ prop1:'C', prop3:"descr3" },
];
有没有办法将var1
转换成上面的方法?换句话说,我想从var1
对象数组中删除prop2
,并将其分配给var2
。我怎样才能做到这一点?
答
删除您可以删除对象属性这样如
var myprop = [
{prop1: 'A', prop2: "1", prop3: "descr1"},
{prop1: 'B', prop2: "2", prop3: "descr2"},
{prop1: 'C', prop2: "3", prop3: "descr3"},
];
myprop = myprop.filter(function (props) {
delete props.prop2;
return true;
});
console.log(myprop);
答
在TypeScript中投射不会删除该属性,而只会将它隐藏在IDE中,因为它将被编译为运行时的JavaScript。
首先,如果您不想从var1
删除prop2
,同时从var2
删除属性,您需要克隆它。对于您将需要此JavaScript函数:
function cloneObject(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
var temp = obj.constructor(); // give temp the original obj's constructor
for (var key in obj) {
temp[key] = cloneObject(obj[key]);
}
return temp;
}
使用克隆功能克隆var1
和循环每个对象var2
删除属性prop2
。您可以通过合并array.forEach用JavaScript这样做,删除:
var var2 = cloneObject(var1);
var2.forEach((obj) => { delete obj.prop2; });
这样做将保持在prop2
但var1
从var2
答
这似乎是一个伟大的时间来使用.map()
var var1 = class2.get();
var var2 = var1.map(obj => ({prop1: obj.prop1, prop3: obj.prop3}));
短,甜甜的,你想要做什么。
这不是你要使用'filter'的地方。你可以使用过滤器去除或保留array_中的_items,而不是属性。在这里,“删除”会产生副作用。这个答案是以完全无意义的方式使用'filter'作为通用迭代方法。 – Xufox