Javascript 对象(object)合并操作实例分析

我来详细讲解一下 "Javascript 对象(object)合并操作实例分析" 的完整攻略,过程中包含两条示例说明。

1、 操作实例说明

在 JavaScript 开发中,我们经常需要将两个或多个对象合并为一个对象,这种操作就是对象的合并。常见的合并方式有浅合并和深合并两种方式。

1.浅合并:将多个对象合并为一个对象,如果属性名相同则直接覆盖原有属性即可。

const mobile1 = {
  brand: 'Apple',
  model: 'iPhone X',
  color: 'white',
};

const mobile2 = {
  model: 'iPhone 12',
  year: 2021,
};

const mobile = Object.assign({}, mobile1, mobile2);
console.log(mobile);  // 输出 { brand: 'Apple', model: 'iPhone 12',color: 'white', year: 2021 }
  1. 深合并:将多个对象中深层次的属性值进行合并。
const mobile1 = {
  brand: 'Apple',
  features: {
    camera: {
      front: true,
      rear: true,
    },
    battery: {
      capacity: 2716,
      standbyTime: 'Up to 10 days',
    },
  },
};

const mobile2 = {
  features: {
    camera: {
      front: false,
      zoom: 2,
    },
    battery: {
      capacity: 2930,
      talkTime: 'Up to 14 hours',
    },
    storage: {
      capacity: '128 GB',
    },
  },
};

function mergeDeep(target1, ...sources) {
  if (!sources.length) return target1;
  const source = sources.shift();
  if (typeof target1 !== 'object' || typeof source !== 'object') {
    return target1;
  }
  Object.keys(source).forEach((key) => {
    if (typeof source[key] === 'object') {
      if (!target1[key]) Object.assign(target1, { [key]: {} });
      mergeDeep(target1[key], source[key]);
    } else {
      Object.assign(target1, { [key]: source[key] });
    }
  });
  return mergeDeep(target1, ...sources);
}

const mobile = mergeDeep({}, mobile1, mobile2);
console.log(mobile);

2、 合并操作实现

首先我们先了解 Object.assign() 方法

Object.assign()

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,返回目标对象。

2.1、 语法

Object.assign(target, ...sources)

2.2、 参数

  • target: 目标对象。
  • sources: 源对象,一个或多个。

2.3、 实例说明

如下代码,我们来演示 Object.assign() 方法的使用。

const mobile1 = {
  brand: 'Apple',
  model: 'iPhone X',
  color: 'white',
};

const mobile2 = {
  model: 'iPhone 12',
  year: 2021,
};

const mobile = Object.assign({}, mobile1, mobile2);
console.log(mobile);  // 输出 { brand: 'Apple', model: 'iPhone 12',color: 'white', year: 2021 }

这里通过 Object.assign() 方法将 mobile1mobile2 两个对象合并为 mobile 对象。其中 {} 表示我们需要合并对象的目标对象,这里用空对象表示。

深合并

如果需要合并对象中更深层次的属性值,可以使用递归实现。这里我们实现了一个 mergeDeep() 函数来实现深层次的合并。

2.4 实例说明

const mobile1 = {
  brand: 'Apple',
  features: {
    camera: {
      front: true,
      rear: true,
    },
    battery: {
      capacity: 2716,
      standbyTime: 'Up to 10 days',
    },
  },
};

const mobile2 = {
  features: {
    camera: {
      front: false,
      zoom: 2,
    },
    battery: {
      capacity: 2930,
      talkTime: 'Up to 14 hours',
    },
    storage: {
      capacity: '128 GB',
    },
  },
};

function mergeDeep(target1, ...sources) {
  if (!sources.length) return target1;
  const source = sources.shift();
  if (typeof target1 !== 'object' || typeof source !== 'object') {
    return target1;
  }
  Object.keys(source).forEach((key) => {
    if (typeof source[key] === 'object') {
      if (!target1[key]) Object.assign(target1, { [key]: {} });
      mergeDeep(target1[key], source[key]);
    } else {
      Object.assign(target1, { [key]: source[key] });
    }
  });
  return mergeDeep(target1, ...sources);
}

const mobile = mergeDeep({}, mobile1, mobile2);
console.log(mobile);

/**
 * 输出
 * {
 *    brand: 'Apple',
 *    features: {
 *       camera: {
 *          front: false,
 *          rear: true,
 *          zoom: 2
 *       },
 *       battery: {
 *          capacity: 2930,
 *          standbyTime: 'Up to 10 days',
 *          talkTime: 'Up to 14 hours'
 *       },
 *      storage: {
 *          capacity: '128 GB'
 *      }
 *    }
 * }
 */

这里通过 mergeDeep() 函数将 mobile1mobile2 两个对象合并为一个新对象 mobile{} 表示要合并的新对象。在 mergeDeep() 函数中我们通过递归实现深层次合并,访问属性时使用 source[key]target1[key] 实现访问对象的深层次属性值。

结语

以上就是 "Javascript 对象(object)合并操作实例分析" 的完整攻略,我们通过两个实例来学习了对象的合并操作。希望可以帮助到大家。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript 对象(object)合并操作实例分析 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js 字符串操作函数

    下面是针对“js字符串操作函数”的详细攻略。 常用字符串操作函数 1.字符串长度 JavaScript中获取字符串长度的方式是通过字符串对象的length属性来实现的。 const str = "hello world"; console.log(str.length); // 11 2.字符串查找 在JavaScript中,字符串对象有…

    JavaScript 2023年5月27日
    00
  • js获取元素到文档区域document的(横向、纵向)坐标的两种方法

    JS获取元素到文档区域document的坐标是一个常见的需求,这个过程可以有两种常见的方法来实现。 方法一:使用offsetLeft、offsetTop逐层累加 offsetLeft和offsetTop属性分别可以获取元素左、上边框到其容器元素上边框的距离。如果我们需要获取元素到文档区域document的水平和竖直方向的距离,则需要逐层遍历每个容器元素,将其…

    JavaScript 2023年6月10日
    00
  • JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法

    问题描述: 在 Android 中使用 WebView 控件加载包含 JavaScript 的网页时,如果在 JavaScript 中使用 parseInt 函数,会出现转换不正确的问题。 解决方法: 在 JavaScript 中,使用 parseInt 函数时,需要注意 radix 参数的设置。如果不指定该参数,则 parseInt 函数会根据字符串的前缀…

    JavaScript 2023年5月28日
    00
  • javascript 面向对象的经典实例代码

    作为一个网站的作者,我很高兴地分享并讲解“JavaScript 面向对象的经典实例代码”的攻略。在本篇攻略中,我将重点讲解 JavaScript 面向对象编程中的几个关键概念、JavaScript 中的类、对象创建、继承等主题,并且会结合实例代码进行说明。 面向对象编程的关键概念 面向对象编程的一个关键概念是“类”,类是一组具有相同特性和行为的对象的抽象描述…

    JavaScript 2023年5月27日
    00
  • 理解Javascript_07_理解instanceof实现原理

    理解Javascript_07_理解instanceof实现原理 在Javascript中,我们可以使用instanceof操作符来判断一个对象是否属于某个类或者构造函数的实例。这是一个非常常见的操作,经常用于判断一个对象的类型。在本篇攻略中,我们将深入探讨instanceof的实现原理,以及如何使用它来判断一个对象的类型。 instanceof的作用 in…

    JavaScript 2023年5月28日
    00
  • JavaScript对象属性设置和屏蔽技巧

    关于JavaScript对象属性设置和屏蔽技巧,我从下面的几个方面详细阐述: 禁止增加属性 我们可以使用 Object.preventExtensions() 方法来禁止对象增加属性。如果我们尝试给一个被禁止增加属性的对象增加属性,就会失败并抛出错误。 const obj = { a: 1, b: 2 }; Object.preventExtensions(…

    JavaScript 2023年5月27日
    00
  • JavaScript中定时器setTimeout()和setInterval()的用法

    JavaScript中定时器包括setTimeout()和setInterval()两种函数,它们都可以让程序按照指定的时间间隔执行一定的代码。 setTimeout()函数 setTimeout()函数用于在指定的毫秒数后执行一段代码,语法如下: setTimeout(func, delay, param1, param2, …) 其中: func: …

    JavaScript 2023年6月11日
    00
  • 微信小程序表单验证form提交错误提示效果

    下面将详细讲解“微信小程序表单验证form提交错误提示效果”的完整攻略。 什么是微信小程序表单验证 表单验证是网站开发中的重要一环,目的是为了让用户在填写表单时能够及时的发现并纠正错误,保证数据的准确性。同样,微信小程序中也需要进行表单验证。 微信小程序表单验证的原理与网站表单验证类似,即使用户在填写表单时有错误输入,也应该及时给予提示,防止用户在数据提交时…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部