我无法从数组中删除重复的对象
示例:
var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];
在这个例子中我有3个对象,我想删除具有重复位置的对象
答案 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
答案 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)