Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 1. Реализовать функцию clone, которая позволяет копировать объекты, содержащие примитивные значения. Пример работы: Пример работы:
- function clone(obj) {
- if ( obj === null || typeof obj !== 'object' ) {
- return obj;
- }
- var result = obj.constructor();
- for (var key in obj) {
- result[key] = clone(obj[key]);
- }
- return result;
- }
- var obj1 = {
- a: 10,
- b: 20
- };
- var obj2 = clone(obj1);
- obj1.a = 15;
- console.log(obj2.a); // 10
- obj2.b = 25;
- console.log(obj1.b); // 20
- // 2. Улучшить функцию clone таким образом, чтобы кроме примитивных значений она могла копировать вложенные значения,
- // включая объекты, массивы, даты.
- // Тут срабатывает функция из задания 1.
- // 3. Реализовать функцию merge(destination, source), которая записывает значения из объекта source в объект destination.
- // Функция поддерживает глубокое копирование, для этого можно воспользоваться реализованной выше функцией clone.
- function merge(destination, source) {
- for (var key in source) {
- if (source.hasOwnProperty(key)) {
- destination[key] = source[key];
- }
- }
- return destination;
- }
- merge(destination, source);
- console.log(destination.a, destination.b.item1, destination.c);
- source.b.item1 = 'window';
- console.log(destination.b.item1);
- //Можно и с clone
- var source = {
- a: 10,
- b: {
- item1: 'title'
- }
- };
- var destination = {
- a: 20,
- b: {
- item1: 'panel'
- },
- c: true
- };
- //clone
- function clone(obj) {
- if ( obj === null || typeof obj !== 'object' ) {
- return obj;
- }
- var result = obj.constructor();
- for (var key in obj) {
- result[key] = clone(obj[key]);
- }
- return result;
- }
- //merge
- function merge(destination, source) {
- var result = clone(source); // будет работать и без, только заменить result на source
- for (var key in result) {
- if (result.hasOwnProperty(key)) {
- destination[key] = result[key];
- }
- }
- return destination;
- }
- merge(destination, source);
- console.log(destination.a, destination.b.item1, destination.c);
- source.b.item1 = 'window';
- console.log(destination.b.item1);
- // 4. Реализовать функцию mergeIf(destination, source), которая записывает значения из объекта source в объект destination
- // только в том случае, если в destination отсутствует такое свойство.
- var source = {
- a: 10,
- b: {
- item1: 'title'
- },
- c: false
- };
- var destination = {
- c: true
- };
- function merge(destination, source) {
- for (var key in source) {
- if (!source.hasOwnProperty(key)) {
- destination[key] = source[key];
- }
- }
- return destination;
- }
- mergeIf(destination, source);
- console.log(destination.a, destination.b.item1, destination.c); // 10, 'title', true
- // 5. Улучшить функцию merge(destination [, source1, source2 ... sourceN]), таким образом, чтобы вместо второго аргумента
- // source она могла принимать 1 и более source-объектов.
- var source1 = {
- a: 10,
- b: {
- item1: 'title'
- },
- c: false
- };
- var source2 = {
- b: [1,2,3],
- c: true
- };
- var destination = {};
- //merge
- function merge(destination) {
- for (var i = 1; i < arguments.length; i++) {
- var arg = arguments[i];
- for (var key in arg) {
- destination[key] = arg[key];
- }
- }
- return destination;
- }
- merge(destination, source1, source2);
- console.log(destination.a, destination.b, destination.c);
- source2.b.push(4);
- source1.a = 50;
- console.log(destination.a, destination.b, destination.c);
- console.log(source1.a, source2.b);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement