-
慕桂英3389331
var arr = [ { orgId: '100', orgName: '信息组' }, { orgId: '100', orgName: '信息组' }, { orgId: '100', orgName: '信息组' }, { orgId: '81', orgName: '安全组' }, { orgId: '11', orgName: '秘书组' }, { orgId: '81', orgName: '安全组' },];Object.values( arr.reduce((obj, next) => { var key = JSON.stringify(next); return (obj[key] = next), obj; }, {}),);我来个最简单的,but 有个缺点,arr里面的对象必须能被 JSON.stringify 处理
-
一只斗牛犬
stringify那位兄弟的去重方法是可以的(之前说稳健是不对的,还不够稳健)。不过代码也是要考虑实际业务场景的,这样的数组数据是怎么来的呢?orgId是不是已经就是有着 唯一Id 的作用的,是不是 orgId 一致的对象,就代表着对象是一致的。如果是的话,那就没必要stringify了,直接拿orgId当key去重就好了
-
皈依舞
这个自己思考下啊,动动手,遍历一下数组,然后把没有出现的元素放到一个新数组返回啊
-
慕妹3146593
Array.prototype.removeRepeatAttr = function(){ var tmp = {}, a = this.slice(); for(var i = j = 0; i < a.length; i++){ if(!tmp[a[i].orgId]){ tmp[a[i].orgId] = !0; j++; }else{ this.splice(j, 1); } };}var arr = [];arr.removeRepeatAttr();
-
慕后森
可以这样写//将对象元素转换成字符串以作比较 function obj2key(obj, keys){ var n = keys.length, key = []; while(n--){ key.push(obj[keys[n]]); } return key.join('|'); } //去重操作 function uniqeByKeys(array,keys){ var arr = []; var hash = {}; for (var i = 0, j = array.length; i < j; i++) { var k = obj2key(array[i], keys); if (!(k in hash)) { hash[k] = true; arr .push(array[i]); } } return arr ; } var array = [{orgId:"100",orgName:"信息组"},{orgId:"100",orgName:"信息组"},{orgId:"100",orgName:"信息组"},{orgId:"81",orgName:"安全组"},{orgId:"11",orgName:"秘书组"},{orgId:"81",orgName:"安全组"}]//进行去重 var arr = uniqeByKeys(array,['orgId','orgName']); 斜体文字
-
汪汪一只猫
可以了解下es6的set:function dedupe(array){ return Array.from(new Set(array));}dedupe([1,1,2,3]) //[1,2,3]
-
一只甜甜圈
万能的 reduce
-
德玛西亚99
以上答案都不支持排序混乱的情况下,且优化一下(避免用Object.values()再进行一次迭代),我补充下:不改变目标数组因为有创建数组并追加的行为,且无法result=Array(length)来让这行为提速,因此这种方式的效率会被给数组赋值所拖累。let arr = [ { orgId: '100', orgName: '信息组' }, { orgName: '信息组', orgId: '100' }, { orgId: '100', orgName: '01', a: 2 }, { orgId: '01', orgName: '100', a: 2 }, { orgId: '81', orgName: '安全组' }, { orgId: '11', orgName: '秘书组' }, { orgId: '81', orgName: '安全组' }, ];let temp = {}, result = [], idx = -1, unit;arr.forEach( val => { unit = Object.keys( val ).map( key => [ key, val[ key ] ] ).sort() + ''; temp[ unit ] || ( result[ ++idx ] = val, temp[ unit ] = 1 ) ;} );console.log( result );改变目标数组源数组长度越大,越突显性能let temp = {}, { length } = arr;for ( let idx = 0; idx < length; idx++ ) { let val = arr[ idx ], unit = Object.keys( val ).map( key => [ key, val[ key ] ] ).sort() + ''; temp[ unit ] ? ( arr.splice( idx, 1 ), idx--, length-- ) : temp[ unit ] = 1};console.log( arr );