有没有办法在JS中克隆对象只有少数属性的对象? 例如..克隆只有几个属性的对象
var Person = {
name: "Bob",
age: 32,
salary: 20000
};
我要创建另一个人的对象只用姓名和年龄属性,使之看起来像这样:
var clonedPerson = {
name: "Bob",
age: 32
};
我能做的深克隆对象和删除。但我想知道是否有更好的方法来做到这一点。
有没有办法在JS中克隆对象只有少数属性的对象? 例如..克隆只有几个属性的对象
var Person = {
name: "Bob",
age: 32,
salary: 20000
};
我要创建另一个人的对象只用姓名和年龄属性,使之看起来像这样:
var clonedPerson = {
name: "Bob",
age: 32
};
我能做的深克隆对象和删除。但我想知道是否有更好的方法来做到这一点。
采用最新ES6,您可以通过下面的代码实现这个..
const Person = {
name: "Bob",
age: 32,
salary: 20000
};
const { salary , ...clonedPerson } = Person
console.log(clonedPerson)
这看起来像一个优雅的解决方案。不幸的是我没有使用ES6。 – codeMan
更简单吗?
var Person = {
name: "Bob",
age: 32,
salary: 20000
};
var ClonedPerson = jQuery.extend({}, Person);
delete ClonedPerson.salary;
console.log(JSON.stringify(Person));
console.log(JSON.stringify(ClonedPerson));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
OP说,**“我可以对该对象进行深层克隆并删除,但我想知道是否有更好的方法来做到这一点。”**然而,您正在使用'delete'? –
我以为这样想就很简单,只是想确认一下。具有讽刺意味的是,你暴露了一个更好的方式...... :) –
@MarcosSedrez谢谢..但是是的..正如Pranesh已经提到..我想知道是否有任何其他方式来做到这一点。 – codeMan
另一种方法使用数组成员方法:
var clone = Object.keys(Person) // convert to an Array of Person keys
.filter(function(key){return ["salary"].indexOf(key) == -1;}) // exclude key salary
.reduce(function(clone, current){clone[current] = Person[current]; return clone;}, {}); // convert back the array to a cloned literal object
您可以只浏览旧对象的属性,只复制所需的对象。 – vlaz
如果你不想使用删除,你必须定义一个只有你想要的属性的新对象。没有本地方法来复制仅具有所需属性的对象。 – Danmoreng
'var clonedPerson = {name:Person.name}' – adeneo