Javascript 对象数组取差集和交集的方法

本文介绍了如何处理对象数组的交集和差集问题,特别是当对象属性不完全相同时。通过重新整理对象属性,使用reduce方法查找特定属性,并利用JSON.stringify进行比较。此外,还提供了一个名为arrayFilter的函数,用于根据指定属性计算差集或交集。文章还包含了示例代码和实际应用。

前言

对象数组常会进行取交集或者差集的操作。
假设有对象数组A和对象数组B,常规方法是比较B对象数组与A对象数组的差异,进而找到其差集或者交集。
但是现在面临的问题是数组A 和数组B中的对象可能不完全一样的情况,可采用以下方法解决该问题。

对象数组的定义

我们把对象数组A定义为长数组,其中包含的对象属性包括了name, age, weight等三个属性;对象数组B定义为短数组,这里是指其元素个数小于数组A,其对象属性包括了name, age等2个属性。

let wideArray = [{
   
   name: "luojiarui", age: 18, weight: 78}, {
   
   name: "zhangqirui", age: 28, weight: 70}];
let shortArray = [{
   
   name: "zhangqirui", age: 28}];

如果我们进行取对象的交集,那么就首先需要将对象属性进行重新处理为一样的属性,再进行差异比较。

最终的差集是:

finalArray = [{
   
   name: "luojiarui", age: 18, weight: 78}]

最终的交集是:

finalArray = [{
   
   name: "zhangqirui", age: 28, weight: 70}]

找出对象中的特定的属性

对象中特定属性的查找可以采用遍历对象的方法,我们这里采用reduce
首先我们看官方案例中计算,数组里所有值的和。这里采用累计器和当前值不断累积,最终计算出整个数组的和。注意在reduce的第二个参数中可以给出累加器的初始值,这里代码给出的是0。

var sum = [0, 1, 2, 3].reduce(function (accumulator, currentValue) {
   
   
  return accumulator + currentValue;
}, 0);
// 和为 6

也可以写成箭头函数的形式:

var total = [ 0, 1, 2, 3 ].reduce(
  ( acc, cur ) => acc + cur,
  0
);

这里,我封装了一个函数,名叫pick。其用途是找出对象中指定的属性,且属性是必须包含。

function pick(obj, arr) {
   
   
  // 参考网络上关于对象属性查找的方法,但是其没有指定必须包含该属性。
  // return arr.reduce((iter, val) => (val in obj && (iter[val] = obj[val]), iter), {});
  // 如果你打算提供一个初始值作为reduce()方法的第二个参数
  return arr.reduce((iter, val) => {
   
   
     if(val in obj) {
   
   
        iter[val] 
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳瑞Jarrett

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值