Js:获取数组对象重复属性值和数组对象去重

这篇具有很好参考价值的文章主要介绍了Js:获取数组对象重复属性值和数组对象去重。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组去重

对象数组去重分为两类:根据某一属性去重,和去重完全相同对象(属性属性值都相同)
一.数组嵌套对象,根据对象某一属性去重

let arr = [
	{id:1, setting:'demo', jointCategoryName:'success'},
	{id:2, setting:'dev', jointCategoryName:'success'},
	{id:3, setting:'prod', jointCategoryName:'fail'},
	{id:4, setting:'demo', jointCategoryName:'waiting'},
	{id:3, setting:'prod', jointCategoryName:'fail'},
	{id:2, setting:'test', jointCategoryName:'success'}
]
function unipFunc(arr){
	let arr1 = []; //存id
	let newArr = []; //存新数组
	for(let i in arr){
		if(arr1.indexOf(arr[i].id) == -1){
			arr1.push(arr[i].id);
			newArr.push(arr[i]);
		}
	}
	return newArr;
}

二、数组嵌套对象,去重完全相同对象(属性属性值都相同)

整理如下:
首先、循环数组,拿到对象的所有属性组成的数组;
其次、循环属性数组把对象的属性和对应的值拼接成字符串;
然后、利用 hasOwnProperty 方法判断这个字符串是不是对象 obj 里的属性,如果不是则以这个字符串为属性,true为值给 obj 对象新增一个属性;

let arr = [
	{id:1, setting:'demo', jointCategoryName:'success'},
	{id:2, setting:'dev', jointCategoryName:'success'},
	{id:3, setting:'prod', jointCategoryName:'fail'},
	{id:4, setting:'demo', jointCategoryName:'waiting'},
	{id:3, setting:'prod', jointCategoryName:'fail'},
	{id:2, setting:'test', jointCategoryName:'success'}
]
function unipFunc(arr){
	var newArr= []; //存新数组
    var obj= {}; //存处理后转成字符串的对象
    for (var i = 0; i < arr.length; i++) {
        var keys = Object.keys(arr[i]);
        //keys.sort(function(a, b) {
        //    return (Number(a) - Number(b));
        //});
        var str = '';
        for (var j = 0; j < keys.length; j++) {
            str += JSON.stringify(keys[j]);
            str += JSON.stringify(arr[i][keys[j]]);
        }
        if (!obj.hasOwnProperty(str)) {
            newArr.push(arr[i]);
            obj[str] = true;
        }
    }
    return newArr;
}

三、普通数组去重

function unipFunc(arr) {
    let newArr = [];
    for (var i = 0; i < arr.length; i++) {
         if (newArr.indexOf(arr[i]) === -1) {
                newArr.push(arr[i]);
         }
    }
    return newArr;
}

四、普通数组获取重复元素

方法一:indexOf和lastIndexOf
function unipFunc(arr) {
    let newArr = [];
    arr.forEach((item)=>{
        if(arr.indexOf(item) !== arr.lastIndexOf(item) && newArr.indexOf(item) === -1){
            newArr.push(item);
        }
    });
    return newArr;
}
方法二:双层for循环
function unipFunc(arr) {
    var Arr = [];
    for(let i=0; i<arr.length; i++ ){
        for(let j=i+1; j<arr.length; j++){
            if(arr[i]===arr[j] && Arr.indexOf(arr[j])===-1){
                Arr.push(arr[i]);
            }
        }
    }
    return Arr;
}

五、数组嵌套对象,获取重复元素和唯一元素及坐标

//数据
const arr =[
    {id:1, schoolId:'100', jointCategoryName:'美术'},
	{id:2, schoolId:'200', jointCategoryName:'美术'},
	{id:3, schoolId:'300', jointCategoryName:'设计'},
	{id:4, schoolId:'100', jointCategoryName:'音乐'},
	{id:3, schoolId:'300', jointCategoryName:'设计'},
	{id:2, schoolId:'400', jointCategoryName:'美术'}
]
  let key = {} //存储的 key 是type的值,value是在indeces中对应数组的下标
  let indices = [] //数组中每一个值是一个数组,数组中的每一个元素是原数组中相同type的下标 
  arr.map((item, index) => {
    //根据对应字段 分类(type)
    let type= item.type
    let _index = key[type]
    if (_index !== undefined) {
      indices[_index].push(index)
    } else {
      key[type] = indices.length
      indices.push([index])
    }
  })
  // 归类结果
  let result = []
  indices.map((item) => {
    item.map((index) => {
    //result.push(List[index]) 相同项排序在一起
    //if (item.length > 1) {} 只要重复项
    //if (item.length == 1){} 只要单独项
  
    //我这里需要重复项 根据业务处理
    if (item.length > 1) {
      result.push(arr[index])
    }
  })
  })
  console.log('获取重复的值=====================>',result[0].type)
  return result;

六、Map()

let arrObj = [
    {id:1, schoolId:'100', jointCategoryName:'美术'},
	{id:2, schoolId:'200', jointCategoryName:'美术'},
	{id:3, schoolId:'300', jointCategoryName:'设计'},
	{id:4, schoolId:'100', jointCategoryName:'音乐'},
	{id:3, schoolId:'300', jointCategoryName:'设计'},
	{id:2, schoolId:'400', jointCategoryName:'美术'}
];
// 方法一:
let map = new Map();
for (let item of arrObj) {
    if (!map.has(item.id)) {
        map.set(item.id, item);
    };
};
arr = [...map.values()];
console.log(arr);
 
 
 
// 方法二: (代码较为简洁)
const map = new Map();
const newArr = arrObj.filter(v => !map.has(v.id) && map.set(v.id, 1));
console.log(newArr);

七、数组去重
普通数组去重

let arr = [1, 1, 1, 2, 3, 4, 5, 5, 6];
let crr = [];
const res = arr.reduce((brr, va) => {
  if (!brr.includes(va)) {
    brr.push(va);
  } else {
    crr.push(va);
  }
  return brr;
}, []);
console.log(res);
console.log(crr);

数组对象去重
方法一

let arr = [{label:'你好',prop:'aa'},{label:'你好',prop:'aa'},{label:'你好2',prop:'bb1'},{label:'你好2',prop:'bb2'}]
let deWeightArr = []; // 去重后的数组
let repetitionArr  = []; // 重复的数组
arr.forEach((item1) => {
  const check = deWeightArr.every((item2) => {
    return item1.prop !== item2.prop;
  });
  check ? deWeightArr.push(item1) : repetitionArr.push(item1);
});
console.log('重复的数据================>>>>>',repetitionArr)
console.log('获取数组去重后的数据================>>>>>',deWeightArr)

方法二

  this.repeatData = [];
  dataList.forEach((item) => {
    if (
      this.repeatData.filter((material) => material.archiveRank === item.archiveRank)
        .length === 0
    ) {
      this.repeatData.push(item);
    }
  });
  console.log('获取重复的数组数据=====》<<<<<<<<<<<<<<<<<<<<<<<',this.repeatData)

原生去重文章来源地址https://www.toymoban.com/news/detail-812201.html

let arr = 
[
   	{id:1, schoolId:'100', jointCategoryName:'美术'},
	{id:2, schoolId:'200', jointCategoryName:'美术'},
	{id:3, schoolId:'300', jointCategoryName:'设计'},
	{id:4, schoolId:'100', jointCategoryName:'音乐'},
	{id:3, schoolId:'300', jointCategoryName:'设计'},
	{id:2, schoolId:'400', jointCategoryName:'美术'}
];
export const distinct = (arr) => {
  var result = [];
  var obj = {};
  for (var i = 0; i < arr.length; i++) {
    if (!obj[arr[i].jointCategoryName]) {
      result.push(arr[i]);
      obj[arr[i].jointCategoryName] = true;
    }
  }
  console.log('获取重复的数组数据=====》<<<<<<<<<<<<<<<<<<<<<<<',result)
  return result;
};
distinct(arr)

到了这里,关于Js:获取数组对象重复属性值和数组对象去重的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js中遍历对象数组并获取对象相应的属性值

    JavaScript中遍历对象数组的方法有很多种。以下是常见的四种常见的方法: for ​循环, for...of ​循环, forEach ​方法和 map ​方法,在遍历的同时,通过访问对象的属性来获取相应的值。 ​ for ​循环: ​ for...of ​循环: ​ forEach ​方法: ​ map ​方法(通常用于创建一个

    2023年04月25日
    浏览(38)
  • js两个数组对象去重,删除两个数组中相同的对象、删除数组对象中某个对象

    模拟一些数据: 方式一:两个数组通过arr1的id和arr2的id比较,返回去重后的arr1  写法二 打印的结果:console.log(newArr); 方式二:删除两个数组对象中相同的对象 方式三:es6 去掉两个数组中相同值的对象 删除数组中某一个对象、指定的对象 数组删除其中的对象或元素,在前端

    2023年04月09日
    浏览(45)
  • js实用篇-去除数组或者对象里重复选项

    在 JavaScript 中,数组去重,对象去重,可以使用多种方法来去除数组或对象中的重复项。以下是其中的一些方法: 方法一:使用 Set 使用 Set 是去除数组中重复项的最简单和最快的方法。Set 对象是一组不重复的值的集合,可以接受一个数组(或者具有可迭代属性的其他对象)

    2024年02月16日
    浏览(33)
  • js判断对象数组中的元素是否存在重复

     1、使用  Array.some()  方法和自定义比较函数: 使用  Array.some()  方法遍历数组,对每个元素执行自定义的比较函数。比较函数使用  Array.findIndex()  方法来查找与当前元素相等且索引不同的元素,如果找到则表示存在重复元素。 2、使用  Set  数据结构: 使用  Set  数据结

    2024年02月13日
    浏览(65)
  • JS判断对象、数组是否包含某个属性、某个值

    可以使用以下几种方法来判断对象是否包含某个属性: 1. in 操作符: 使用 in 操作符可以检查对象是否包含指定的属性。它会检查对象及其原型链上的所有属性。 2. hasOwnProperty() 方法: hasOwnProperty() 是对象的内置方法,用于检查对象自身是否具有指定的属性(不包括原型链上

    2024年02月09日
    浏览(73)
  • js对象获取属性的方法(.和[]方式)

    js对象获取属性有两种方法:1.通过.的方式  2. 通过[]方式 // 通过.方式获取属性值,key是静态的 var aa = {name: \\\"zhang\\\", age: 18}; console.log(aa.name);   // 通过[]获取属性值, key是动态的,可以是字符串,或者数字的形式 var bb = {\\\"apple\\\": 3, \\\"pear\\\": 2} var cc = {1: \\\"number1\\\", 2: \\\"number2\\\"} console.log(b

    2024年02月01日
    浏览(43)
  • js获取对象属性值的方法

    场景:已知对象的某属性,我们需要获取对象中的属性值 js获取对象属性值的方法 通过 . 获取 通过 [ ] 获取 接下来介绍一下两种方法的不同点 [ ]运算符可以用 数字 作为属性名,点运算符不能 [ ]运算符可以用 变量 作为属性名,点运算符不能 ps: 用变量key获取对象中的属性

    2024年02月02日
    浏览(48)
  • js合并数组对象(将数组中具有相同属性对象合并到一起,组成一个新的数组)

    1.原数组: 2.合并后数组: 3.实现方法: 4.测试: 1.原数组: 2.合并后数组: 3.实现方法一: 测试: 4.实现方法二: 测试:

    2024年02月08日
    浏览(62)
  • js在数组对象中添加和删除键值对(对象属性)的方法

    添加 1.Object.assign():用法-Object.assign(源对象, {要添加的键值对}) 2.拓展运算符(...):用于取出参数对象所有可遍历属性然后拷贝到当前对象 3.object[key] = value:直接给新的key赋值 删除 1.将属性设置为 undefined:属性本身仍将存在于对象中,它还会改变原始对象。 2.使用 delete 操

    2024年02月14日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包