Javascript从数组中删除重复的对象

时间:2015-07-13 16:13:20

标签: javascript jquery arrays object

我无法从数组中删除重复的对象

示例:

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];

在这个例子中我有3个对象,我想删除具有重复位置的对象

6 个答案:

答案 0 :(得分:1)

万一有人怀疑: protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs args) { var notifyCollectionChangedEventHandler = CollectionChanged; if (notifyCollectionChangedEventHandler == null) return; foreach (NotifyCollectionChangedEventHandler handler in notifyCollectionChangedEventHandler.GetInvocationList()) { var dispatcherObject = handler.Target as DispatcherObject; if (dispatcherObject != null && !dispatcherObject.CheckAccess()) { dispatcherObject.Dispatcher.Invoke(DispatcherPriority.DataBind, handler, this, args); } else handler(this, args); // note : this does not execute handler in target thread's context } } 解决方案:

underscore.js

Example Fiddle

答案 1 :(得分:1)

一个简单的:

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];

list.forEach(function(i) {
  var duplicates = list.filter(function(j) {
    return j !== i && j.place == i.place;
  });
  duplicates.forEach(function(d) { list.splice(list.indexOf(d), 1); });
});

// list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}];
document.write(JSON.stringify(list));

答案 2 :(得分:0)

试试这个。

i = 0;    
for(var item in result) {
    clearnArr[i++] = result[item];
}

再次循环结果,然后重新创建数组。

total = sum([15*(3**i)*int('1'*(i+1)) for i in range(6)])
>>> 418964910

答案 3 :(得分:0)

创建object以按place值存储项目,因为具有相同键的新项目将覆盖旧项目,这将轻松删除所有项目。

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];
var removeDuplicate = function(list) {
  var keyStore = {};
  var output = [];
  // If you want to creata totally new one from old, use 
  // list = JSON.parse(JSON.stringify(list));
  // The above commented out code will create a copy of list, so the items in output will not affect the original ones.
  list.forEach(function(item) {
    // new one overwrites old one.
    keyStore[item.place] = item;
  });
  
  var key;
  for (key in keyStore) {
    output.push(keyStore[key]);
  }
  
  return output;
};

console.log(removeDuplicate(list));

答案 4 :(得分:0)

正如你添加的那样:

  

我想只删除一个,不管哪个

如果你想删除重复的项目并且只保留特定地点的第一个项目,你可以简单地使用一个简单的循环从输入重新创建一个新数组:

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];

var uniqPlace = function(array){
    var result = [];
    array.forEach(function(el){
        if (result.filter(function(n){ return n.place === el.place }).length==0){
            result.push(el);
        }
    })
    return result;
}

输出:

uniqPlace(list);
  

[{"地方":" AAA""名称":" ME"},{"地方&#34 ;:" BBB""名称":"您"}]

答案 5 :(得分:0)

从阵列中删除重复对象的3种方法

let list = [{place:"AAA",name:"Me"}, 
            {place:"BBB",name:"You"}, 
           {place:"AAA",name:"Him"}];



let output1 = Array.from(new Set(list.map(list=>list.place))).map(place=>{
  return {
   place: place,
   name: list.find(a=>a.place===place).name
  }
})
console.log('------------------------1st way')
console.log(output1)

let output2 = list.reduce((accumulator, element) => {
     if (!accumulator.find(el => el['place'] === element['place'])) {
          accumulator.push(element);
      }
     return accumulator;
   },[]);
console.log('------------------------2nd way')
console.log(output2)


const output3 = [];
const map = new Map();
for (const object of list) {
    if(!map.has(object.place)){
        map.set(object.place, true);
        output3.push({
            place: object.place,
            name: object.name
        });
    }
}
console.log('------------------------3rd way')
console.log(output3)