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日

相关文章

  • 20个常见的JavaScript数组操作总结

    20个常用的JavaScript数组操作总结 JavaScript数组是一种包持有有序数据的变量类型,提供了许多方便的方法,可以对数组进行各种操作。下面的这20个数组操作是在编写JavaScript时几乎无法避免的,熟练掌握这些操作可以让你高效地使用数组。 1. 创建数组 创建一个JavaScript数组最简单的方法就是使用方括号([])来包含一个或多个元素…

    JavaScript 2023年5月27日
    00
  • 整理JavaScript对DOM中各种类型的元素的常用操作

    整理JavaScript对DOM中各种类型的元素的常用操作攻略 DOM是文档对象模型(Document Object Model)的缩写,JavaScript通过DOM对HTML页面中的各种元素进行操作,从而实现动态网页效果。在DOM中,各种类型的元素均可以通过JavaScript进行操作。下面,我们将详细讲解如何使用JavaScript对DOM中各种类型的…

    JavaScript 2023年6月10日
    00
  • 在HTML中插入JavaScript代码的示例

    在HTML中插入JavaScript代码有多种方式,包括内部脚本、外部脚本和行内脚本。下面给出三种示例说明。 1. 内部脚本 内部脚本指的是将JavaScript代码直接嵌入HTML中,这种方式在HTML中使用标签来实现。下面是一个示例如何通过内部脚本来实现响应点击事件: <!DOCTYPE html> <html> <head…

    JavaScript 2023年5月18日
    00
  • javascript中数组和字符串的方法对比

    下面是详细讲解“javascript中数组和字符串的方法对比”的完整攻略。 前言 在javascript中,数组和字符串是常用的数据类型之一。它们都有各自的方法,但也有一些相同的方法。在这篇攻略中,我们将会详细讲解数组和字符串的方法对比。 数组和字符串的相同方法 length方法 数组和字符串都有一个length属性,可以获取其长度。 示例代码: let a…

    JavaScript 2023年5月27日
    00
  • js String对象中常用方法小结(字符串操作)

    下面我来详细讲解一下“js String对象中常用方法小结(字符串操作)”的完整攻略。 1. String对象 在JavaScript中,字符串属于基本类型,但对于字符串的操作,可以使用JavaScript内置的String对象提供的方法。 2. 常用方法小结 2.1 字符串连接 字符串连接是指将两个或多个字符串合并成一个字符串,String对象提供的连接方…

    JavaScript 2023年5月20日
    00
  • js定时器(执行一次、重复执行)

    下面我来详细讲解关于JS定时器的使用方法。 JS定时器概述 JS定时器是指按照指定的时间间隔来执行一段JavaScript代码的一种机制。在Web开发中,经常需要执行一些定时操作,例如图片轮播、定时刷新页面等等,这时候就可以使用JS定时器。 JS定时器一般分为两种类型:setTimeout和setInterval。其中setTimeout表示延时执行一次任务…

    JavaScript 2023年6月11日
    00
  • Javascript中的delete操作符详细介绍

    完整攻略:Javascript中的delete操作符详细介绍 什么是delete操作符? delete操作符用于删除对象中的属性,可以是对象的自身属性或继承自原型链的属性。如果被删除的属性是对象自身的属性,delete操作符将返回true,否则返回false。使用delete删除一个未定义的属性时不会报错,而且返回true。 语法:delete object…

    JavaScript 2023年5月28日
    00
  • 如何将JS的变量值传递给ASP变量

    将JS的变量值传递给ASP变量需要借助AJAX技术来实现,具体步骤如下: 在HTML页面中引入jQuery库和ASP文件: <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script language=&…

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