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);
上述代码首先将两个数组arr1
和arr2
通过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
属性的唯一性。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qdvuejs/10778.html