js list 中去除重复的json

在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"}]

阅读 7.8k
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>

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

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

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 对比上。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题