JavaScript比较数组的方法

两个数组对象进行比较&&两个数组进行比较 数组对象取出不同值 方法一: let array1 = [ {"name": "哆啦" },{"name": "莓莓" }]; let array2 = [ {"name": "哆啦","date": "2019-03" }, {"name": "莓莓","date": "2020-04"}, {"name": "布尔" ,"date": "2020-06"}]; let result = []; for(let i = 0; i < array2.length; 阅读详情

JavaScript比较数组的方法

1、比较两个对象数组,删除重复项,根据属性合并对象

我们确实需要比较两个不同的对象数组,并希望在两个对象匹配特定属性值的情况下合并这两个对象。可以使用filter()方法来实现。

该filter()方法创建一个新数组,其中所有元素都通过了由提供的功能实现的测试。

让我们创建测试数据:

let array1 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 }
];
let array2 = [
{ id: "53", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建函数:

let res = array2.filter(val =>
    array1.some(({
        value
    }) => (val.value as any) === (value as any))
);
console.log("1", JSON.stringify(res));
//[{"id":"53","active":"a","value":10},{"id":"51","active":"a","value":11}]
2、比较两个对象数组,合并和更新值(假设数组3,4共享相同的ID)

有时我们确实会有这样的需求,将两个不同的属性与新的属性值合并。我们可以使用map()创建一组新的对象数组,并且可以使用find()方法在更新新值之前匹配特定属性。

该map()方法创建一个新数组,其中填充了在调用数组中每个元素上调用提供的函数的结果。

该find()方法返回提供的数组中满足提供的测试功能的第一个元素的值。如果没有值满足测试功能,undefined则返回。

让我们创建测试数据:

let array3 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 }
];
let array4 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建函数:

let arr = [];
array3.map(id =>
    arr.push({
        id: id.id,
        newValue: array4.find(o => o.id === id.id).value + 2
    })
);
console.log("2", JSON.stringify(arr));
//[{"id":"50","newValue":12},{"id":"51","newValue":13}]
3、比较对象数组并找到唯一的对象

如果我们要比较两个对象数组并检查其中哪些是唯一对象,则可以使用filter()来实现这些功能。

让我们创建测试数据:

const array5 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 }
];
const array6 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 },
{ id: "52", active: "a", value: 13 }
];

让我们创建函数:

const ids = array5.map(e => e.id);
let filtered = array6.filter(e => ids.includes(e.id));
console.log("3", JSON.stringify(filtered));
//[{"id":"50","active":"a","value":12},{"id":"51","active":"a","value":15}]
4、根据匹配的值比较和更新属性

当我们要比较两个对象数组并根据匹配的值更新特定的属性时,可以使用这些函数。

让我们创建测试数据:

const array7 = [
{ id: "50", active: "a", value: 12 },
{ id: "51", active: "a", value: 15 }
];
const array8 = [{ id: "50", active: "a", value: 12 }];

让我们创建函数:

const idSet = new Set(array8.map(o => o.id));
const res1 = array7.map(o => ({ ...o, value: idSet.has(o.id) ? "0" : o.value }));
console.log("4", JSON.stringify(res1));
//[{"id":"50","active":"a","value":"0"},{"id":"51","active":"a","value":15}]
5、比较两个数组对象并获得差异

当我们要比较两个不同的对象数组并得到它们之间的差异时,可以使用这些函数。

让我们创建测试数据:

let a = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 }
];
let b = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建函数:

let valuesArray1 = a.reduce(function(a, c) {
    a[c.value] = c.value;
    return a;
}, {});
let valuesArray2 = b.reduce(function(a, c) {
    a[c.value] = c.value;
    return a;
}, {});
var result = a
    .filter(function(c) {
        return !valuesArray2[c.value];
    })
    .concat(
        b.filter(function(c) {
            return !valuesArray1[c.value];
        })
    );
console.log("5", result);
//[{"id":"52","active":"a","value":13}]
//shorthand
let ab = b.filter(o => !a.find(o2 => o.id === o2.id));
console.log("6", ab);
6、比较对象的两个数组合并,并删除重复项

如果我们有要求比较两个对象数组并从它们中删除重复项并合并两个数组,则可以使用此方法。

让我们创建测试数据:

let arr1 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 }
];
let arr2 = [
{ id: "50", active: "a", value: 10 },
{ id: "51", active: "a", value: 11 },
{ id: "52", active: "a", value: 13 }
];

让我们创建函数:

const arr1IDs = new Set(arr1.map(({ id }) => id));
const combined = [...arr1, ...arr2.filter(({ id }) => !arr1IDs.has(id))];
console.log(JSON.stringify(combined));
//[{"id":"50","active":"a","value":10},{"id":"51","active":"a","value":11},{"id":"52","active":"a","value":13}]
7、Lodash

Lodash支持_differenceBy和 _differenceWith查找两个数组之间差异的方法。

let lodashtest1 = [{ id: "50" }, { id: "51" }];
let lodashtest2 = [{ id: "50" }, { id: "51" }, { id: "52" }];
let lodashresult = _.differenceBy(lodashtest2, lodashtest1, "id");
console.log("7", JSON.stringify(lodashresult));
//[{"id":"52"}]
let dif = _.differenceWith(lodashtest2, lodashtest1, _.isEqual);
console.log("8",JSON.stringify(dif));
//[{"id":"52"}]
8、比较对象并找到唯一值

当我们使用嵌套对象时,有时很难弄清楚我们如何迭代和比较两个嵌套对象并在其中获得一些唯一的对象。我们可以使用Object.keys和Object.values方法进行迭代。

让我们创建测试数据:

let obj1 = {
val1: "test",
stream: { prop1: false, prop2: true }
};
let obj2 = {
val1: "test",
stream: { prop1: true, prop2: true }
};
interface Data {
stream: { [key: string]: boolean };
}

让我们创建函数:

function objFilter(objA: Data, objB: Data): Data {
let out: Data = { stream: {} };
Object.keys(objA.stream).filter((value, idx) =>
Object.values(objA.stream)[idx] === Object.values(objB.stream)[idx]
? (out.stream[value] = Object.values(objA.stream)[idx])
: false
);
return out;
}
console.log(JSON.stringify(objFilter(obj1, obj2))); //prop2
//{"stream":{"prop2":true}}
JavaScript 数组比较完全指南:浅比较·深比较·无序比较 在 JavaScript 中,直接使用==或===比较两个数组只能判断它们是否引用同一对象,而无法按“值”比较元素内容。要想判断两个数组内容一致,必须使用值比较的方法,常见方案包括:将数组序列化后比较(手动逐项遍历比较(如for循环、everyincludes或者构建元素计数映射(frequency map)实现 O(n) 复杂度的无序比较。在大型或性能敏感场景,也可借助 Lodash 的_.isEqual进行深度比较。 阅读详情

相关推荐

【LabVIEW懒人系列教程-视觉入门】2.6LabVIEW模板匹配之创建模板

上期2.5在Labview软件框架中实现了模板匹配功能的运用,然而我们的模板图像是通过视觉助手创建出来的,在实际项目中这样做 ,难免有些不妥。所以,今天就给大家讲解一下,如何编写创建模板功能,模板图像的创建与加载需要注意一些什么。 模板图片的创建,大家可以理解为将图像中的一个特征区域扣下来,通过Labview函数进行信息学习,然后保存成带有图像信息的模板图。 具体做法,下面为大家演示一下 百度网盘视频链接:https://pan.baidu.com/s/1-zxcJBxPgk4t1Ej..

视觉龙哥 2162

JS比较两个对象数组的差异

后台传过来一个对象数组,vue渲染到页面中,然后修改了这个对象数组,可能是增删改了其中的某些对象。但是不是操作一下就发到后台去保存,而是只是前端页面在发生变化,最后点击提交按钮的时候才把变化过的数据传到后台去更新。 而且后台更新的时候,不是把这整个数组替换成新的,而是改动里面的一部分。 所以最后一步发送到后台的时候,前端就需要比较新的对象数组相比于原来的对象数组做了什么操作。然后把这些操作发送到后台。 以下是比较的算法,刚开始我是把list1和list2都遍历了一遍,觉得效率低就改为了下面的。 /** *

weixin_43069875的博客 1万+

【ESP32-S3量产指南】基于Flash下载工具实现Release模式Flash加密与安全配置

本文详细介绍了ESP32-S3量产阶段如何通过Flash下载工具实现Release模式下的Flash加密与安全配置。从加密模式选择、工具配置到分区表优化,提供了一套完整的量产安全解决方案,帮助开发者有效防止固件泄露和篡改,确保设备安全。

weixin_28730131的博客 228

JavaScript随手笔记---对比数组差异

大家好,又见面了,我是夜阑的狗🐶,本文是专栏【JavaScript随手笔记】专栏的第4篇文章;今天的需求中要到两个数组的比较,不相同则进行覆盖,相同则不操作,所以只要对比多两个数组之间的差异即可;【JavaScript随手笔记】, 此专栏是我是夜阑的狗对JS数据处理的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。🌹 🌹 🌹也欢迎你,关注我。👍 👍 👍!!

JMFive的博客 1万+

在虚拟机上搭建FTP服务器

chroot_list_file=/etc/vsftpd/chroot_list # 对chroot_list下用户限制。[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #打开配置文件。# 指定用户的shell: -s /usr/bin/nologin。# 在配置文件中找到以下几行代码, 去掉注释(去掉 "#"号)# 指定用户主目录:/data/ftp/ftpuser -M。(2)修改配置文件,路径/etc/vsftpd/ 下的文件。

weixin_70753380的博客 3202

Penpot自托管全攻略:5分钟搞定私有化部署(附Docker配置详解)

本文详细介绍了Penpot开源原型设计工具的私有化部署全流程,从Docker基础配置到企业级优化方案。通过分步指南和实战技巧,帮助设计团队快速搭建安全高效的自托管环境,实现数据自主可控。内容涵盖LDAP集成、性能监控、备份策略等关键企业需求,是Penpot私有化部署的完整参考手册。

sugar的博客 1118

JS 比较两个数组差异的方法

JS 比较两个数组差异的方法 在开发过程中,我们有时需要对两个的数组进行差异的比较,并将差异变成一个新的数组,我们可以使用简单的方法实现。 差异比较方法: const getArrDifference = (arr1, arr2) => { return arr1.concat(arr2).filter((v, i, arr) => { return arr.indexOf(v) === arr.lastIndexOf(v); }) } 演示示例: const getArrDi

你是我修复不了的bug,但我会用一生去维护 1万+

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

8种JavaScript比较数组的方法

英文 |https://javascript.plainenglish.io/7-methods-for-comparing-arrays-in-javascript-88f10c071...

web前端开发 9774

如何使用ArcGIS Pro制作带基底三维地图

点击运行生成范围线,因为之前对高程进行了夸大,导致生成的范围线和地形边缘不重合,我们打开范围线的图层属性,选择高程选项卡,要素位于选择地面上,如下图所示。目前制作的三维地图下面是空的一片,现在添加一个基底,在工具箱内点击“3D Analyst工具\栅格\转换\栅格范围”,调用栅格范围工具,如下图所示。打开ArcGIS Pro,新建一个局部场景,在高程表面下,地面上点击右键,选择添加高程源图层,将需要制作三维地图的DEM数据加载进来,如下图所示。在要素图层菜单内,类型选择绝对高度,如下图所示。

3973

自研SSD固件:从零实现固态硬盘底层存储控制系统

本文探讨了自主开发SSD固件的可行性及实现方案。分析表明,虽然NAND Flash控制协议标准化且存在开源参考实现,但开发仍面临FTL设计复杂度高、性能调优等挑战。推荐采用FPGA平台(如Xilinx Zynq-7000)搭配SLC NAND Flash的方案,预计开发周期9-12个月。系统采用分层架构设计,包含主机接口层、FTL层和闪存接口层,核心模块需实现NAND Flash底层驱动、地址映射管理和垃圾回收等功能。文中提供了关键数据结构和基础驱动代码示例,包括页读写、块擦除等操作。该方案着重解决NAND

电脑管家 1853

JavaScript进行数组比较的四类方法

当使用 `for`、`while`、`for-of`、`find`、`findIndex` 等语法时,空元素会返回 `undefined` 值;以上介绍的数组元素的类型都是原始类型(String、Number、Boolean),但数组元素还可以是另外三种特殊情况:`空元素`、`null`、`undefined`,接下来将简单介绍下出现这三种情况时的比较方式。- 当使用数组实例方法循环如 `forEach`、`map`、`every`、`some`、`filter` 等方法时,空元素会被跳过;

weixin_46895187的博客 7511

026:vue+threeJS 设置地面铺砖的效果

BoxGeometry 是 Three.js 中用于创建立方体或长方体的几何体类。它允许你指定立方体的宽度、高度、深度以及这三个方向上的分段数,从而控制立方体的细分程度。width: 立方体的宽度(沿 x 轴方向)。height: 立方体的高度(沿 y 轴方向)。depth: 立方体的深度(沿 z 轴方向)。widthSegments: 可选参数,指定立方体在 x 轴方向上的分段数,默认值为 1。heightSegments: 可选参数,指定立方体在 y 轴方向上的分段数,默认值为 1。

大剑师兰特的GIS世界 630

JavaScript 数组方法全面总结及相似方法比较

JavaScript数组方法全面解析:摘要 JavaScript提供了功能丰富的数组操作方法,主要分为增删改查、遍历、过滤和归并等几大类。常用方法包括:push/pop/unshift/shift/splice用于修改数组;forEach/map/for-of用于遍历;find/filter/indexOf用于查找;some/every用于判断;reduce/concat/slice用于归并组合。ES6新增了flat/flatMap/Array.from等方法。使用时需注意三点:是否改变原数组、返回值类型以

weixin_43170787的博客 718

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JS比较数组的方法

JavaScript比较数组的方法 1、比较两个对象数组,删除重复项,根据属性合并对象 我们确实需要比较两个不同的对象数组,并希望在两个对象匹配特定属性值的情况下合并这两个对象。可以使用filter()方法来实现。 该filter()方法创建一个新数组,其中所有元素都通过了由提供的功能实现的测试。 让我们创建测试数据: let array1 = [ { id: "50", active: "a", value: 10 }, { id: "51", active: "a", value: 11 } ]; le

qq_45967222的博客 8584

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

js注意点:数组比较大小方法及数组与对象的区别

(迁移自旧博客2017-04-19) 快速复制数组及数组比较大小方法 首先介绍一下复制数组的方法: var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var aCopy = arr.slice(); aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']; 这样就成功复制数组了,是不是很神奇? slice()就是对应...

weixin_30951743的博客 829

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

js比较数组的方法

一、比较两个对象数组,删除重复项,根据属性合并对象 我们确实需要比较两个不同的对象数组,并希望在两个对象匹配特定属性值的情况下合并这两个对象。可以使用filter()方法来实现。 该filter()方法创建一个新数组,其中所有元素都通过了由提供的功能实现的测试。 让我们创建测试数据: let array1 = [ { id: "50", active: "a", value: 10 }, { id: "51", active: "a", value: 11 } ]; let array2 = [

IT博客技术分享 3140

js遍历mysql_JavaScript数组遍历的6种方法比较

本篇文章给大家比较一下6种JS数组遍历方法:for、foreach、for in、for of、. each、 ().each,介绍一下它们的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。6种JS数组遍历方法一、forJavascript中的for循环,它用来遍历数组var arr = [1,2,3,4]for(var i = 0 ; i< arr.length ; ...

weixin_42526415的博客 330

JS数组sort()方法中的比较函数的理解。

大家在学习sort方法中的比较函数时可能经常见到下面这种例子。 var points = [40,100,1,5,25,10]; points.sort(function(a,b){return a-b}); 教程往往直接说返回 a - b 就是升序,b - a 就是降序。那么我们应该如何理解呢? 1. 比较函数参数 a, b 代表的含义 sort方法是对数组中的值进行冒泡排序,因此a, b便代表数组的两个相邻元素。 这里特别需要注意的是 a 代表后面一个元素,b 是前面的元素!!! ab 不仅可以是数字

qq_40805985的博客 4269

JavaScript系列:实用的数组比较方法

但是,由于JavaScript中数组是以引用方式比较,而非值比较,这使得直接使用等号(== 或 ===)比较两个数组通常会返回false。例如:​​​​​​​。在JavaScript中,如果两个数组变量指向同一个数组,那么它们是相等的。但如果两个数组包含相同的元素,即便它们是独立创建的,使用===进行比较时也会返回false。例如:​​​​​​​。Array.every()方法提供了一种更精确的比较方式,确保数组在长度和所有位置上的元素值都相同。直接使用==或===比较会因为引用差异而失败。

浪潮行舟_2136 747

JavaScript常用的数组和对象遍历方法_js数组和对象的遍历方式,以及几种方式的比较

for、forEach、for…of这三种方式,都是遍历数组的方法,根据实际的场景自己选择使用那个方法,如果信息比较多,那么可以选择forEach,如果只是单纯的取到实际的元素,那么可以使用for…of。

java_dazhuzhu的博客 1280

js比较数组的方法_js两个对象数组对比差异

我们可以使用map()创建一组新的对象数组,并且可以使用find()方法在更新新值之前匹配特定属性。该find()方法返回提供的数组中满足提供的测试功能的第一个元素的值。该map()方法创建一个新数组,其中填充了在调用数组中每个元素上调用提供的函数的结果。该filter()方法创建一个新数组,其中所有元素都通过了由提供的功能实现的测试。当我们要比较两个对象数组并根据匹配的值更新特定的属性时,可以使用这些函数。当我们要比较两个不同的对象数组并得到它们之间的差异时,可以使用这些函数。让我们创建测试数据:、

2501_90243235的博客 1164

JavaScript比较运算符及5个重要的数组方法

本文简要的介绍JavaScript里的比较运算符的用法和关于数组的最重要的5个方法,这5个方法是每个想要高效的进行JavaScript编程的程序员必须知道的。 1、比较运算符带来的疑惑  当我们对Number类型(JavaScript定义了Number、字符串、布尔值、数组和对象5种数据类型。JavaScript不区分整数和浮点数,统一用Number表示)做比较时,可以通过比较运算符得到一个布尔值:

Hopefully Sky的博客 886
上一篇: JavaScript开发优化技巧
下一篇: 如何在JavaScript中获取时间戳
烂泥也能扶上墙
博客等级 码龄7年 62粉丝 97原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值