在数组中都是数字的时候很好去重,例如:var  arr=[1,2,2,2,3,4,5,4,5,3,6];可以用两层for循环或者其他方式进行去重

我在这里也给出一个方法吧:

Array.prototype.distinct = function (){
var arr = this,
len = arr.length;
arr.sort(function(a,b){ //对数组进行排序才能方便比较
return a - b;
})
function loop(index){
if(index >= 1){
if(arr[index] === arr[index-1]){
arr.splice(index,1);
}
loop(index - 1); //递归loop函数进行去重
}
}
loop(len-1);
return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,45,56

在数组中都是对象的时候就需要设置布尔值来进行去重操作,原理也是两层for循环,但是在第一层for循环内需要定义布尔值为true,用来维持一个量,之后在内层for循环中进行比对,如果按照某个条件比对满足的话,布尔值就为false,之后在第一层for循环里第二层for循环外进行布尔判断,如果为真,将数据插入到新数组,如果不为真,则不用添加,从此达到了数组去重的功能,以下是代码演示

var oldArr = [
{id:1,name:"zhangs",age:18,contact_id:1},
{id:1,name:"zhangs",age:18,contact_id:2},
{id:1,name:"zhangs",age:18,contact_id:3},
{id:1,name:"zhangs",age:18,contact_id:14},
{id:1,name:"zhangs",age:18,contact_id:3},
{id:1,name:"zhangs",age:18,contact_id:2},
{id:1,name:"zhangs",age:18,contact_id:1}
];//原数据数组
var allArr = [];//新数组

1.该方法为jquery方法
$.each(oldArr,function(i,v){
var flag = true;
if(allArr.length > 0){
$.each(allArr,function(n,m){
if(allArr[n].contact_id == oldArr[i].contact_id){flag = false;};
});
};
if(flag){
allArr.push(oldArr[i]);
};
});
2.原生js方法
for(var i=0;i<oldArr.length;i++){
  var flag = true;
  for(var j=0;j<allArr.length;j++){
    if(oldArr[i].id == allArr[j].id){
      flag = false;
    };
  };
  if(flag){
    allArr.push(oldArr[i]);
  };
};

封装一下,方便调用:

function qcArr(arr,name){
var allArr = [];
for(var i=0;i<arr.length;i++){
  var flag = true;
  for(var j=0;j<allArr.length;j++){
    if(arr[i].name == allArr[j].name){
      flag = false;
    };
  };
  if(flag){
    allArr.push(arr[i]);
  };
};
return allArr;
}

值得收藏!!javascript数组中多条对象去重方式,很实用!!!的更多相关文章

  1. 利用reduce方法,对数组中的json对象去重

    数组中的json对象去重 var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1Q ...

  2. js数组中重复的对象去重

    var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4h ...

  3. javascript 数组中出现的次数最多的元素

    javascript 数组中出现的次数最多的元素 var arr = [1,-1,2,4,5,5,6,7,5,8,6]; var maxVal = arr[0]; // 数组中的最大值 var min ...

  4. vue 数组中嵌套的对象添加新属性--页面更新

    vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735

  5. JavaScript 删除某个数组中指定的对象和删除对象属性

    Javascript: 删除指定对象:使用过程中只适合删除对象,如果数组中添加的是类型Function的话是删除不了的. function removeObjWithArr(_arr,_obj) { ...

  6. JavaScript 删除某个数组中指定的对象

    返回对象在数组中的下标: _arr表示一个Array数组,里面包括了很多的对象如下图: _obj表示某一个数组对象     function getIndex (_arr,_obj) { var le ...

  7. javascript数组的内置对象Array

    javascript的内置对象Array是用于构造数组的全局对象,数组是类似于列表的高阶对象. 创建数组的方法: 1通过字面量:var arr = [1,2,3]; 里面的参数直接作为数组里的值 2通 ...

  8. javascript数组中数字和非数字下标的区别(转)

    http://blog.csdn.net/qq_27461663/article/details/52014911 考完试后闲来无事,想起好多天没写js了,于是打算实践一下最近看到的一些好玩的点子.结 ...

  9. JavaScript数组中的22个常用方法

    数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细介绍. ...

随机推荐

  1. 公设基础equals

    1#  覆盖equals方法的通用约定 1.自反性(reflexive) 自己跟自己的比较必须返回true 2.对称性(symmetric) x=y那么y=z 3.传递性(transitive) x= ...

  2. Linux-SFTP/SSH免密码,钥匙登录

    1.原理 登录的客户端要有私钥,被登录的服务器要保存客户端生成的公钥. 2.修改服务器/etc/ssh/sshd_config设置,如下: sudo vi /etc/ssh/sshd_config P ...

  3. 洛谷 P2820 局域网

    题目链接 https://www.luogu.org/problemnew/show/P2820 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内 ...

  4. python的学习之路(二)

    1.字符串内置功能练习#!/usr/bin/env python# *_*coding:utf-8 *_*# Author: harsonname = 'harson'name =str('harso ...

  5. Final Cut Pro X for Mac(FCPX专业视频剪辑工具)实用技巧篇!

    Final Cut Pro X for Mac是一款非常强大的专业视频剪辑工具,全球很多人都在用!现在小编给大家带来一些关于Final Cut Pro X for Mac的使用技巧,希望对大家以后的应 ...

  6. list学习内容总结

    list定义:list[]或者[]内任意类型的内容,多个用逗号分开 name1 = list(['Cyberpunk2077', 'Jim', 2077]) name2 = list('Cyberpu ...

  7. Scrapy:Python实现scrapy框架爬虫两个网址下载网页内容信息——Jason niu

    import scrapy class DmozSpider(scrapy.Spider): name ="dmoz" allowed_domains = ["dmoz. ...

  8. VS2013+ffmpeg开发环境搭建

    VS2013+ffmpeg开发环境搭建 转 https://blog.csdn.net/u014253332/article/details/86657868 一.准备ffmpeg相对应开发dll.i ...

  9. Linux-共享内存通信

    Linux共享存储通信 内容 创建共享存储区实现进程通信 机理说明 共享存储区(Share Memory)是Linux系统中通信速度最高的通信机制.该机制中共享内存空间和进程的虚地址空间满足多对多的关 ...

  10. iperf3 使用

    iperf 分client 和 server server:   iperf3 -s -p 5000 -i 1 client: iperf3 -c 192.168.31.11 -p 5000 Serv ...