javascript - js list 中去除重复的json
高洛峰
高洛峰 2017-04-11 11:34:56
[JavaScript讨论组]

在js 中如何在list去重重复的json?

//数组去重
function uniqueList(array){
  var r = [];
  for(var i = 0, l = array.length; i < l; i++) {
    for(var j = i + 1; j < l; j++)
      if (array[i] === array[j]) j = ++i;
    r.push(array[i]);
  }
  return r;
}

以上代码并不起作用。

例如:

var list = [{"name":"123"},{"name":"123"},{"name":"456"}]

结果:

var list = [{"name":"123"},{"name":"456"}]

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
巴扎黑
<script>
var arr = [];
var list = [{"name":"4561"},{"name":"123"},{"name":"123"},{"name":"456"}];
for(var i = 0; i < list.length; i++){
if(i == 0) arr.push(list[i]);
b = false;
if(arr.length > 0 && i > 0){
    for(var j = 0; j < arr.length; j++){
        if(arr[j].name == list[i].name){
            b = true;
        //break;
        }
    }
    if(!b){ arr.push(list[i]);}
}
}
for(var x = 0; x <arr.length; x++)
{alert(arr[x].name);}
</script>
黄舟

两个对象是不能这么比较的,所指向的内存地址不同
只能遍历对象里面的属性去比较

ringa_lee

这样比较的是对象的地址,所以始终是不同的,你可以在原型上定义一个比较对象相等的方法,可解决你这个问题:

Object.prototype.equals = function(obj){
  if(this.name === obj.name) return true;
  else return false;
}
怪我咯

原代码:

//数组去重
function uniqueList(array){
  var r = [];
  for(var i = 0, l = array.length; i < l; i++) {
    for(var j = i + 1; j < l; j++)
      if (array[i] === array[j]) j = ++i;
    r.push(array[i]);
  }
  return r;
}

更改后代码:

//数组去重
function uniqueList(array){
  var r = [];
  for(var i = 0, l = array.length; i < l; i++) {
    for(var j = i + 1; j < l; j++)
      //关键在这里
      if (JSON.stringify(array[i]) == JSON.stringify(array[j])) j = ++i;
    r.push(array[i]);
  }
  return r;
}

你的代码问题出在 倆 Object 对比上。

伊谢尔伦

把===换成==就行了 ===是绝对等于,地址也要相同~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号