当前位置:网站首页 > Vue.js开发 > 正文

js中,删除arr1中比arr2中多的对象之filter、find & 数组中是否有相同对象之every、some & 删除数组中不是相同的对象 & 对象数组,去重后合并

js中,删除arr1中比arr2中多的对象之filter、find & 数组中是否有相同对象之every、some & 删除数组中不是相同的对象 & 对象数组,去重后合并

1、场景1-删除arr1中比arr2中多的对象

删除arr1中比arr2中多的对象

let arr1 = [ { 
    classify: "1", workerCode: 15 }, { 
    classify: "1", workerCode: 16 }, { 
    classify: "1", workerCode: 17} ]; let arr2 = [ { 
    classify: "1", workerCode: 15}, { 
    classify: "1", workerCode: 16 }, ]; //可以使用JavaScript的Array.filter()方法结合一些条件判断来实现删除arr1中比arr2中多的对象的操作。 arr1 = arr1.filter(obj1 => { 
    // 判断arr2中是否存在与obj1相同的对象 const foundObj2 = arr2.find(obj2 => obj2.workerCode === obj1.workerCode); // 如果存在相同的对象,保留obj1 if (foundObj2) { 
    return true; } // 如果不存在相同的对象,删除obj1 else { 
    return false; } }); 

上述代码中,Array.filter()方法会遍历arr1中的每个对象,并将其传递给回调函数obj1 => {…}。在回调函数中,我们首先使用Array.find()方法在arr2中查找是否存在与obj1相同的对象,将其赋值给foundObj2。如果存在相同的对象,说明obj1在arr2中也存在,应该保留在arr1中,因此返回true。如果不存在相同的对象,说明obj1在arr2中不存在,应该被删除,因此返回false。最终,Array.filter()方法会返回一个新的数组,其中仅包含arr1和arr2中相同的对象。

值得注意的是,上述代码中的条件判断仅基于workerCode属性进行,因为这是arr1和arr2中对象唯一的区分标识。如果两个数组中的对象可能存在其他属性值不同的情况,需要根据实际情况进行扩展判断。

2、场景2-数组中是否有相同对象

数组中是否有相同对象

let arr1 = [ { 
    classify: "1", workerCode: 15 }, { 
    classify: "1", workerCode: 16 }, { 
    classify: "1", workerCode: 17} ]; let arr2 = [ { 
    classify: "1", workerCode: 15}, { 
    classify: "1", workerCode: 16 }, ]; 

arr2中的每个对象在arr1中都存在相同的对象,因为它们具有相同的workerCode属性值。

数组中的对象相等通常需要满足所有属性的值都相等,或者满足某些特定的相等条件。在这个问题中,我们假设两个对象相等当且仅当它们的workerCode属性值相等。因此,我们可以使用JavaScript的Array.every()方法和Array.some()方法来判断arr2中的每个对象是否在arr1中都存在相同的对象。

const isSubset = arr2.every(obj2 => { 
    return arr1.some(obj1 => obj1.workerCode === obj2.workerCode); }); console.log(isSubset); // true 

上述代码中,Array.every()方法会遍历arr2中的每个对象,并将其传递给回调函数obj2 => {…}。在回调函数中,我们使用Array.some()方法在arr1中查找是否存在与obj2相同的对象,将其赋值给isSubset。如果所有的obj2都存在相同的对象,说明arr2是arr1的子集,因此返回true。如果存在任何一个obj2没有相同的对象,说明arr2不是arr1的子集,因此返回false。最终,我们可以使用console.log()方法打印isSubset的值,以验证arr2是否为arr1的子集。

请注意,上述代码中的条件判断仅基于workerCode属性进行,因为这是arr1和arr2中对象唯一的区分标识。如果两个数组中的对象可能存在其他属性值不同的情况,需要根据实际情况进行扩展判断。

3、场景3-删除arr1中不是相同的对象

删除arr1中不是相同的对象

let arr1 = [ { 
    classify: "1", workerCode: 15 }, { 
    classify: "1", workerCode: 16 }, { 
    classify: "1", workerCode: 17} ]; let arr2 = [ { 
    classify: "1", workerCode: 15}, { 
    classify: "1", workerCode: 16 }, ]; arr1 = arr1.filter(obj1 => { 
    // 判断arr2中是否存在与obj1相同的对象 const foundObj2 = arr2.find(obj2 => obj2.workerCode === obj1.workerCode); // 如果存在相同的对象,保留obj1 if (foundObj2) { 
    return true; } // 如果不存在相同的对象,删除obj1 else { 
    return false; } }); 

上述代码与之前删除arr1中比arr2中多的对象的代码基本相同,唯一的区别是在条件判断部分。在这里,我们仍然使用Array.find()方法在arr2中查找是否存在与obj1相同的对象,将其赋值给foundObj2。如果存在相同的对象,说明obj1在arr2中也存在,应该保留在arr1中,因此返回true。如果不存在相同的对象,说明obj1在arr2中不存在,应该被删除,因此返回false。最终,Array.filter()方法会返回一个新的数组,其中仅包含arr1和arr2中相同的对象。

因此,我们可以使用上述代码来删除arr1中不是相同的对象。最终的结果应该是arr1仅包含arr2中的对象,即:

console.log(arr1); // [{ classify: "1", workerCode: 15 }, { classify: "1", workerCode: 16 }] 
4、场景4-js对象数组,去重后合并

js对象数组,去重后合并

let arr1 = [ { 
    classify: "1", workerCode: 15 }, { 
    classify: "1", workerCode: 16 }, { 
    classify: "1", workerCode: 17 } ]; let arr2 = [ { 
    classify: "1", workerCode: 15 }, { 
    classify: "1", workerCode: 18 }, { 
    classify: "1", workerCode: 19 } ]; // 合并两个数组 let mergedArray = arr1.concat(arr2); // 创建一个Map来存储对象,使用workerCode作为键 let uniqueMap = new Map(); // 遍历合并后的数组 for (let obj of mergedArray) { 
    const key = obj.workerCode; // 如果Map中不存在相同的键,则将对象添加到Map中 if (!uniqueMap.has(key)) { 
    uniqueMap.set(key, obj); } } // 将Map中的值转换为数组 let mergedAndUniqueArray = Array.from(uniqueMap.values()); console.log(mergedAndUniqueArray); 

上述代码首先将两个数组arr1arr2通过concat()方法合并为一个数组mergedArray。然后,我们创建一个Map对象uniqueMap来存储对象,并使用workerCode属性作为键。接下来,我们遍历合并后的数组,并检查uniqueMap中是否已存在相同的键。如果不存在,则将对象添加到uniqueMap中。最后,我们使用Array.from()方法将uniqueMap中的值转换为数组,得到合并且去重后的数组mergedAndUniqueArray

输出结果将是合并且去重后的数组。在本例中,输出结果为:

[ { 
    classify: "1", workerCode: 15 }, { 
    classify: "1", workerCode: 16 }, { 
    classify: "1", workerCode: 17 }, { 
    classify: "1", workerCode: 18 }, { 
    classify: "1", workerCode: 19 } ] 

对象的去重是基于workerCode属性的唯一性。

到此这篇js中,删除arr1中比arr2中多的对象之filter、find & 数组中是否有相同对象之every、some & 删除数组中不是相同的对象 & 对象数组,去重后合并的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • js将数字转换成万、亿、万亿2024-11-29 11:18:04
  • js实现页面跳转链接的几种方式2024-11-29 11:18:04
  • vue3中,校验方法之身份证号脱敏、校验数字长度、特殊字符校验2024-11-29 11:18:04
  • vue3中,form表单校验之特殊字符校验、手机号、身份证号、百分制数字 & route和router的写法 & setup的两种用法 & rules中校验之blur和change2024-11-29 11:18:04
  • vue3中,下载模板(一)2024-11-29 11:18:04
  • js之对象数组操作——添加到数组中、删除非同对象、非同对象参数置空2024-11-29 11:18:04
  • vue中,js封装方法之判断js对象类型 & 封装方法之js对象深拷贝2024-11-29 11:18:04
  • vue项目中 jsconfig.json和tsconfig.json文件配置释义 & compilerOptions配置2024-11-29 11:18:04
  • js计算两个时间戳的时间差之多少天、时、分、秒,格式0000、动态显示年月日时分秒(不足两位补0)2024-11-29 11:18:04
  • vue中,格式化时间戳转换成标准时间 & 获取随机id-uuid & random-m到n的随机数2024-11-29 11:18:04
  • 全屏图片