2016-09-27 6 views
0

Есть ли способ клонировать объект с несколькими свойствами объекта в JS? Например ..Клонировать объект только с несколькими свойствами

var Person = { 
    name: "Bob", 
    age: 32, 
    salary: 20000 
}; 

Я должен создать объект другого человека с только имя и возраст собственности, так что это будет выглядеть примерно так:

var clonedPerson = { 
    name: "Bob", 
    age: 32 
}; 

Я мог бы сделать глубокий клон из объект и удалить. Но я хотел знать, есть ли лучшие способы сделать это.

+0

Вы можете просто просмотреть свойства старого объекта и только скопировать его по желанию. – vlaz

+0

Если вы не хотите использовать delete, вам нужно определить новый объект только с теми свойствами, которые вы хотите. Не существует собственного метода для копирования объекта с только желаемыми свойствами. – Danmoreng

+1

'var clonedPerson = {name: Person.name}' – adeneo

ответ

3

Используя новейшие ES6, вы можете добиться этого с помощью следующего кода ..

const Person = { 
 
    name: "Bob", 
 
    age: 32, 
 
    salary: 20000 
 
}; 
 
const { salary , ...clonedPerson } = Person 
 

 
console.log(clonedPerson)

+0

Это выглядит как элегантное решение. К сожалению, я не использую ES6. – codeMan

3

Проще всего?

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>

+2

OP сказал: ** «Я мог бы сделать глубокий клон объекта и удалить. Но я хотел знать, есть ли лучшие способы сделать это». ** Тем не менее, вы используете 'delete'? –

+0

Я так и думал очень просто, просто хотел подтвердить. И, по иронии судьбы, вы показали лучший способ ... :) –

+0

@MarcosSedrez Спасибо .. Но да .. как сказал Пранеш. Я хотел знать, есть ли альтернативный способ сделать это. – codeMan

1

альтернативный подход с использованием методов элемента массива:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^