首页 > 其他分享 >JS实现对象只复制已存在的属性

JS实现对象只复制已存在的属性

时间:2024-08-26 14:48:05浏览次数:4  
标签:const target name JS source 复制 key 属性

JavaScript 实现只复制已存在属性的笔记

在 JavaScript 中,如果需将一个对象的属性复制到另一个对象中,但只复制目标对象中已经存在的属性,可以使用以下几种方法:


1. 手动遍历属性

通过遍历 source 对象的属性,并判断 target 对象中是否存在对应属性,决定是否进行复制。

const source = { name: 'John', age: 30 };
const target = { name: 'Mike' };

for (let key in source) {
    if (target.hasOwnProperty(key)) {
        target[key] = source[key];
    }
}

console.log(target); // 输出: { name: 'John' }
  • 优点: 简单直接,控制权完全在开发者手中。
  • 缺点: 代码较为冗长,不适合处理复杂逻辑。

2. 使用 Lodash 的 _.assignWith

Lodash 提供了 _.assignWith 方法,可以传入自定义的处理逻辑。

const _ = require('lodash');

const source = { name: 'John', age: 30 };
const target = { name: 'Mike' };

_.assignWith(target, source, (objValue, srcValue, key) => {
    return target.hasOwnProperty(key) ? srcValue : objValue;
});

console.log(target); // 输出: { name: 'John' }
  • 优点: 灵活性高,可以处理更复杂的场景。
  • 缺点: 需要引入第三方库。

3. 使用 Object.keysforEach

通过现代 JavaScript 语法,使用 Object.keysforEach 进行属性复制。

const source = { name: 'John', age: 30 };
const target = { name: 'Mike' };

Object.keys(target).forEach(key => {
    if (source.hasOwnProperty(key)) {
        target[key] = source[key];
    }
});

console.log(target); // 输出: { name: 'John' }
  • 优点: 语法简洁,适合现代 JavaScript 项目。
  • 缺点: 不适用于深层嵌套对象的复制。

总结

以上方法都能实现只复制目标对象中已存在属性的功能,可以根据项目需求选择最适合的方式:

  • 如果需要完全控制逻辑,手动遍历适合你。
  • 如果项目中已经使用了 Lodash,可以直接利用其工具函数。
  • 如果偏好使用现代 JavaScript 语法,Object.keysforEach 是一个好选择。

标签:const,target,name,JS,source,复制,key,属性
From: https://www.cnblogs.com/echohye/p/18381024

相关文章

  • Part4-DOM学习笔记-获取元素属性及节点操作
    6.获取元素属性6.1获取元素属性获取元素的属性有两种方式:element.属性:获取内置属性值,元素本身自带的属性不能获取自定义属性代码示例如console.log(div.id)element.getAttribute(‘属性’):可以获取内置属性值可以获取自定义属性代码示例如下:console.......
  • net.sf.json.JSONObject 放入数组 坑
    publicstaticvoidmain(String[]args){com.google.gson.JsonObjectjsonObject=newcom.google.gson.JsonObject();jsonObject.addProperty("sss","[null]");com.google.gson.JsonArrayjsonArray=newcom.google.g......
  • HTML+CSS+JS 实现淘宝首页官网
    效果展示:完整代码:HTML部分:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport&q......
  • 【JS逆向百例】携某 testab 参数补环境详解
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • Node.js-身份证号实名认证-小程序实名认证接口集成方法
    使用身份证实名认证API之前,首先要确保已有一个可运行的开发环境,例如小程序或应用程序开发环境。这将是集成和测试API的基础。在应用中设计一个用户输入界面,用于用户输入姓名和身份证号码,同时设计提交按钮以触发验证流程。在选择合适的身份证实名认证API服务提供商时,应考......
  • Api中子类继承父类后,子类设置JsonIgnore失效的补救
    如publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}}publicclassStudent:Person{publicstringGrade{get;set;}[Newtonsoft.Json.JsonIgnore]publicnewintAge{get;set;}}序列化Student,Age还是一......
  • 并发上传的JS代码
    asyncfunctionuploadFile(file){constformData=newFormData();formData.append('video',file);try{constresponse=awaitfetch('YOUR_UPLOAD_URL',{method:'POST',body:for......
  • Node.js 安装与使用及连接 MongoDB 的详细教程
    下面我将详细讲解如何安装Node.js、介绍Node.js的脚手架工具、使用Express脚手架创建项目,以及如何安装和连接MongoDB。一、Node.js安装下载Node.js:访问Node.js官方网站。根据你的操作系统选择最新的LTS(长期支持版)版本下载并安装。一般推荐使用LTS版本,因为......
  • 基于javaweb+jsp的鲜花商城系统
    基于javaweb+jsp的鲜花商城系统的设计与实现~开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+JSP工具:IDEA/Ecilpse、Navicat、Maven系统展示前台后台摘要  当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈......
  • 重塑列表美学:CSS `list-style` 属性的魔法
    重塑列表美学:CSSlist-style属性的魔法摘要CSS的list-style属性是控制列表项标记样式的强大工具。通过这个属性,开发者可以轻松改变无序列表和有序列表的外观,包括标记的类型、位置以及图像。本文将深入探讨list-style属性的各个方面,并提供丰富的代码示例,展示如何使用......