我有一个具有很多属性的对象,可以这样说:
obj1={a:1, b:2,..., z:-1};
我想将一组属性分开,如下所示:
obj2={a:1, h:25, w:3};
obj3={rest of properties};
我在做什么是:
const {a,h,w,...obj3} = obj1;
const obj2={a,h,w};
这是实现这一目标的唯一方法吗?有没有办法忽略未定义的属性?例如,假设h是未定义的,那么理想情况下obj2只会是obj2 = {a,w}将来obj1可能会增长,这意味着我将不得不在方法的两行中添加新属性。
这不是唯一的方法,但是其他方法也有您注意到的相同问题:必须对属性名称进行编码,因此,如果以后添加更多属性,则必须添加这些属性。无论哪种方式,您都必须具有以下列表:A)您想要的属性obj2
或B)您想要的属性obj3
。
只是为了说明,这是另一种方式,但我并不是说这更好。
const obj1 = {a: 1, b: 2, h: 8, w: 23, x: 24, c: 3};
// Your original code:
function original() {
const {a,h,w,...obj3} = obj1;
const obj2={a,h,w};
console.log("obj2", obj2);
console.log("obj3", obj3);
}
original();
// Another way to do it, but still has the same problem
function alternative() {
const obj2props = new Set(["a", "h", "w"]);
const obj2 = {};
const obj3 = {};
for (const key of Object.keys(obj1)) {
const target = obj2props.has(key) ? obj2 : obj3;
target[key] = obj1[key];
}
console.log("obj2", obj2);
console.log("obj3", obj3);
}
alternative();
.as-console-wrapper {
max-height: 100% !important;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句