Javascript 将特定特性从一个对象移动到另一个对象

Javascript 将特定特性从一个对象移动到另一个对象,javascript,object,Javascript,Object,我有一个具有很多属性的对象,比如: 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可能会增长,

我有一个具有很多属性的对象,比如:

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
中的属性列表

为了举例说明,这里有另一种方法,但我并不是说它更好:

constobj1={a:1,b:2,h:8,w:23,x:24,c:3};
//您的原始代码:
函数原件(){
常数{a,h,w,…obj3}=obj1;
常数obj2={a,h,w};
console.log(“obj2”,obj2);
console.log(“obj3”,obj3);
}
原文();
//另一种方法,但仍然有同样的问题
函数替代项(){
const obj2props=新集合([“a”、“h”、“w”);
常量obj2={};
常量obj3={};
for(对象的常量键。键(obj1)){
const target=obj2props.has(键)?obj2:obj3;
目标[键]=obj1[键];
}
console.log(“obj2”,obj2);
console.log(“obj3”,obj3);
}
备选方案()
。作为控制台包装器{
最大高度:100%!重要;

}
除非您对哪些键应该抽象到第二个对象中有一些逻辑规则,否则您需要手动维护它。但是您应该在一个地方定义关键点,然后动态地将它们添加到各自的对象中。类似的方法可能会奏效(使用lodash):


这样,您只需将列表保存在一个位置。

我有一个与您的备选方案类似的想法,但我想看看是否有一种更省力的方法,谢谢您的帮助。我不知道javascript中的set对象,有趣的是,我以前从未见过它被使用过。@JesusUrquizo-很高兴这有帮助
Set
仅在ES2015中添加,因此人们仍在习惯它。:-)
const obj2Keys = [a, h, w]
_.forEach(obj1, (k, v) => {
  if (obj2Keys.include(k)) obj2[k] = v
  else { obj3[k] = v }
})