Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点:从阵列中删除重复对象_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 节点:从阵列中删除重复对象

Javascript 节点:从阵列中删除重复对象,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有一个对象数组,我想删除重复的项目。以下讨论了该主题,但ES6解决方案似乎不适用于对象: 一个解决方案是在一个小的修改后使用您提到的相同的解决方案;由于不可能将对象用作键,我们可以将其用作JSON,即字符串: Array.prototype.getUnique = function() { var u = {}, a = []; for(var i = 0, l = this.length; i < l; ++i) { var index = JSON.

我有一个对象数组,我想删除重复的项目。以下讨论了该主题,但ES6解决方案似乎不适用于对象:


一个解决方案是在一个小的修改后使用您提到的相同的解决方案;由于不可能将对象用作键,我们可以将其用作JSON,即字符串:

Array.prototype.getUnique = function() {
    var u = {}, a = [];
    for(var i = 0, l = this.length; i < l; ++i) {
        var index = JSON.stringify(this[i]);
        if(u.hasOwnProperty(index)) {
            continue;
        }
        a.push(this[i]);
        u[index] = 1;
    }
    return a;
}
Array.prototype.getUnique=function(){
变量u={},a=[];
对于(变量i=0,l=this.length;i

希望这对您有所帮助:)

一个解决方案是,在进行一个小的修改后,使用您提到的相同的解决方案;由于不可能将对象用作键,我们可以将其用作JSON,即字符串:

Array.prototype.getUnique = function() {
    var u = {}, a = [];
    for(var i = 0, l = this.length; i < l; ++i) {
        var index = JSON.stringify(this[i]);
        if(u.hasOwnProperty(index)) {
            continue;
        }
        a.push(this[i]);
        u[index] = 1;
    }
    return a;
}
Array.prototype.getUnique=function(){
变量u={},a=[];
对于(变量i=0,l=this.length;i

希望这有帮助:)

使用lodash的qby或qwith;)

const=require('lodash');
const myArray=[{fname:“Bob”,sname:“Brown”},{fname:“Jill”,sname:“White”},{fname:“Bob”,sname:“Brown”}];

log(q.uniqWith(myArray,q.isEqual))使用lodash的qby或qwith;)

const=require('lodash');
const myArray=[{fname:“Bob”,sname:“Brown”},{fname:“Jill”,sname:“White”},{fname:“Bob”,sname:“Brown”}];

log(q.uniqWith(myArray,q.isEqual))对于lodash,您可以使用
.uniqBy
.uniqWith
——请参阅Steven Lecler的答案

有关详细信息,请参阅

如果你对编写代码是认真的,那么你就不应该为这样的简单情况重新发明轮子

如果您想知道如何正确实现它,请参阅此处的源代码:


请记住,当您使用JSON.stringify时,首先必须将其放入try/catch块中,因为您的程序会因某些数据而崩溃(或者您应该使用-disclaimer,我是该模块的作者)您将得到不同但具有相同JSON序列化的对象的误报。

对于lodash,您可以使用
.uniqBy
.uniqWith
——请参阅Steven Leclerc的答案

有关详细信息,请参阅

如果你对编写代码是认真的,那么你就不应该为这样的简单情况重新发明轮子

如果您想知道如何正确实现它,请参阅此处的源代码:

请记住,当您使用JSON.stringify时,首先必须将其放入try/catch块中,因为您的程序会因某些数据而崩溃(或者您应该使用-disclaimer,我是该模块的作者)并且您将获得不同但具有相同JSON序列化的对象的误报。

不使用lodash:

function removeDuplicates(myArr, prop) {
  return myArr.filter((element, pos, arr) => {
    return arr.map(mapObj => mapObj[prop]).indexOf(element[prop]) === pos;
  });
}
不含lodash:

function removeDuplicates(myArr, prop) {
  return myArr.filter((element, pos, arr) => {
    return arr.map(mapObj => mapObj[prop]).indexOf(element[prop]) === pos;
  });
}

在这里,第一个和最后一个元素并不代表相同的对象,所以它不会从集合中移除

var myArray=[{fname:"Bob", sname:"Brown"},{fname:"Jill",sname:"White"},{fname:"Bob", sname:"Brown"}];
var set1 = new Set(myArray);
console.log([...set1]);
/*
[ { fname: 'Bob', sname: 'Brown' },
  { fname: 'Jill', sname: 'White' },
  { fname: 'Bob', sname: 'Brown' } ]
*/
在这里,只有一个对象被添加到集合中,因为两者都是相同的

var set2 = new Set();
var obj1 = {fname:"Bob", sname:"Brown"};
set2.add(obj1);
set2.add(obj1);
console.log([...set2]);
/*
[ { fname: 'Bob', sname: 'Brown' }]
*/

您必须手动比较两个对象内容,并删除任何重复项。

此处第一个和最后一个元素不代表相同的对象,因此不会从集合中删除它

var myArray=[{fname:"Bob", sname:"Brown"},{fname:"Jill",sname:"White"},{fname:"Bob", sname:"Brown"}];
var set1 = new Set(myArray);
console.log([...set1]);
/*
[ { fname: 'Bob', sname: 'Brown' },
  { fname: 'Jill', sname: 'White' },
  { fname: 'Bob', sname: 'Brown' } ]
*/
在这里,只有一个对象被添加到集合中,因为两者都是相同的

var set2 = new Set();
var obj1 = {fname:"Bob", sname:"Brown"};
set2.add(obj1);
set2.add(obj1);
console.log([...set2]);
/*
[ { fname: 'Bob', sname: 'Brown' }]
*/

您必须手动比较两个对象内容,并删除所有重复项。

@StevenLeclerc谢谢。我更新了我的答案,也参考了你的答案。@StevenLeclerc谢谢。我更新了我的答案,也参考了你的答案。代码有效,谢谢。在理解uniq.js、uniqBy.js和uniqWith.jsCode之间的区别时遇到困难,谢谢。无法理解uniq.js、uniqBy.js和uniqWith.js之间的区别