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日

相关文章

  • JavaScript中的普通函数和箭头函数的区别和用法详解

    介绍JavaScript中的普通函数和箭头函数的区别和用法,可以从以下几个方面进行详细的讲解: 普通函数和箭头函数的区别 语法结构 普通函数: function add(a, b) { return a + b; } 箭头函数: const add = (a, b) => { return a + b; } this指向 普通函数的this指向调用它的…

    JavaScript 2023年5月27日
    00
  • js保存当前路径(cookies记录)

    要保存当前路径,可以使用浏览器的 cookies 功能。cookies 可以将一些数据保存在用户端,当用户再次访问网站时,网站可以获取 cookies 中保存的数据。因此,我们可以将当前路径存储在 cookies 中,以便用户下次访问时可以直接跳转到上次访问的路径。 下面是实现此功能的步骤: 1. 引入 js-cookie 库 我们可以使用 js-cooki…

    JavaScript 2023年6月11日
    00
  • JavaScript 输入框内容格式验证代码

    下面就是 JavaScript 输入框内容格式验证代码的完整攻略。 目录 输入框格式验证的意义 正则表达式初探 使用 HTML5 属性进行格式验证 使用 JavaScript 进行格式验证 1. 输入框格式验证的意义 很多网站都有注册或提交信息的功能,输入框内容格式验证可以帮助用户更好地填写信息,减少错误。同时,也可以减少服务器接收到非法数据的情况。 2. …

    JavaScript 2023年6月10日
    00
  • Move.js入门

    Move.js入门攻略 什么是Move.js Move.js是一个轻量级的JavaScript动画库,用于实现Web页面中的动画效果。它支持常用的CSS动画属性以及自定义路径和缓动效果,同时具有跨浏览器兼容性和高性能特点。 安装Move.js 可以通过以下两种方式来安装Move.js: 从官方网站下载move.min.js文件并引入到HTML文件中: &lt…

    JavaScript 2023年6月10日
    00
  • three.js镜头追踪的移动效果实例

    下面给出关于three.js镜头追踪的移动效果实例的完整攻略。 什么是three.js镜头追踪的移动效果? three.js是一个基于WebGL的3D图形库,我们可以利用它创建交互式的3D图形、音频、视频和动画。在three.js中,我们可以通过操纵相机对象实现对场景中物体的观察。镜头追踪的移动效果指的是让相机对象自动跟随物体移动,生成一种“物体静止,镜头随…

    JavaScript 2023年6月11日
    00
  • 详解addEventListener的三个参数之useCapture

    addEventListener是DOM元素对象常用的事件绑定方法,其常用的用法如下: element.addEventListener(event, function [, options]); 其中,第三个参数options可以是一个布尔值,也可以是一个对象。当其是一个布尔值时,表示useCapture,即事件是否在捕获阶段(capturing phas…

    JavaScript 2023年6月11日
    00
  • thinkphp3.x中cookie方法的用法分析

    ThinkPHP3.x中cookie方法的用法分析 什么是Cookie Cookie(又称为 HTTP cookie 或者 Web cookie)是指在访问网站时,由网站服务器发送给浏览器的一小段数据,然后浏览器将数据保存在本地硬盘上,每次访问该网站时将数据发送给网站服务器。Cookie 目的在于记录站点统计信息、用户习惯、购物车内容或者保存用户账号密码等。…

    JavaScript 2023年6月1日
    00
  • JavaScript Math对象和调试程序的方法分析

    针对“JavaScript Math对象和调试程序的方法分析”的详细讲解,我会分别进行介绍。 JavaScript Math 对象 在 JavaScript 中,Math 是一个内置的全局对象,用于执行常见的数学运算。以下是 Math 对象的一些常见方法: 1. Math.round() Math.round() 方法可把一个数字四舍五入为最接近的整数。 示…

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