从JavaScript中的对象克隆具有特定属性的对象?

时间:2018-07-18 11:26:13

标签: javascript object clone

从具有特定属性而非全部属性的另一个对象克隆一个对象的优化方法是什么?

像下面一样,我们可以通过投影从对象获取值:

let tempObject = { 
  prop1 : 'something',
  prop2 : 'something' ,
  other : 'others'
};
//then
let { prop1, prop2} = tempObject;

以同样的方式,我想从另一个对象中克隆一些属性,例如

let oldObject = { 
  p1 : 'something',
  p2 : 'somethig',
  p3 : 'something' 
}

想要从oldObject上方仅使用p1 and p2这两个属性来制作另一个对象。 预期的newObject将是{p1 : 'something', p2 : 'somethig'}

我知道有很多方法可以做到这一点,但我想通过解释来了解优化的方法。

2 个答案:

答案 0 :(得分:3)

我会保持简单:

@Component
public class MyServiceUser{
    @Autowired
    private MyService<FirstMyDao> dao;

}

@Service
public class MyService<T extends AbstractMyDao>{

    @Autowired
    private T myDao;
}

abstract class AbstractMyDao{}
@Repository
class FirstMyDao extends AbstractMyDao{}

@Repository
class SecondMyDao extends AbstractMyDao{}

这将非常非常快,正如您评论的那样,您正在考虑性能。

您可以通过循环使其复杂化:

let newObject = {
    p1: oldObject.p1,
    p2: oldObject.p2
};

或者使用属性限制(ES2018,在现代浏览器中,并且很长时间以来一直受编译器支持),您可以复制除您命名的内容之外的所有内容:

let newObject = {};
for (const name of ["p1", "p2"]) {
    newObject[name] = oldObject[name];
}

但是在大​​多数情况下,我会保持简单。

答案 1 :(得分:1)

您可以使用lodash通过_.pick仅选择相关属性,如下所示:

_.pick(oldObject, ["p1", "p2"])

您可以在此处查看有效版本:https://jsfiddle.net/W4QfJ/19493/

或查看:Filter object properties by key in ES6