这个数组如何去重啊??

var arr=[{
            source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津华苑科技产业开发建设有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津华苑科技产业开发建设有限公司", target: "天津海泰科技发展股份有限公司"
        },]

结果是

var arr=[{
            source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津华苑科技产业开发建设有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津华苑科技产业开发建设有限公司", target: "天津海泰科技发展股份有限公司"
        },]

可以使用underscore.js

阅读 5.5k
7 个回答

这和你之前那道题有什么不一样

    _.uniq(arr, true, item => {
      return item.source + item.target
    })

我觉得可以给数组的每个对象元素用JSON.stringify()都转成字符串,去重之后再用JSON.parse()转回来

var arr =[{

        source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
    },{
        source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
    },{
        source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
    },{
        source: "天津华苑科技产业开发建设有限公司", target: "天津海泰方成投资有限公司"
    },{
        source: "天津华苑科技产业开发建设有限公司", target: "天津海泰科技发展股份有限公司"
    },]
var arr1=[];
for (var i=0;i<arr.length;i++) {
if (arr.indexOf(arr[i])==-1) {
arr1.push(arr[i])
}
}
    function unique(arr) {
        let _arr = [],
            obj = {
                target: {},
                source: {}
            };
        arr.forEach(v => {
            if ((obj.target[v.target] || obj.target[v.target]) && v.source == v.target) {
                _arr.push(v);
                obj.target[v.target] = obj.source[v.source] = 1;
            }
            if (!obj.target[v.target] || !obj.source[v.source]) {
                _arr.push(v);
                obj.target[v.target] = obj.source[v.source] = 1;
            }
        });
        return _arr;
    }

比较丑陋。。。

var arr=[{
            source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津海泰科技发展股份有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津华苑科技产业开发建设有限公司", target: "天津海泰方成投资有限公司"
        },{
            source: "天津华苑科技产业开发建设有限公司", target: "天津海泰科技发展股份有限公司"
        },]
        
const splitWord = '!@@#!'//最好加上分隔符

_.uniq(arr, item => {
  return item.source + splitWord + item.target//加上分隔符避免意外
})

set 数据结构

let dedupeArr = [...new Set(arr.map(v => JSON.stringify(v)))].map(v => JSON.parse(v));
[
    {
        "source": "天津海泰科技发展股份有限公司",
        "target": "天津海泰方成投资有限公司"
    },
    {
        "source": "天津华苑科技产业开发建设有限公司",
        "target": "天津海泰方成投资有限公司"
    },
    {
        "source": "天津华苑科技产业开发建设有限公司",
        "target": "天津海泰科技发展股份有限公司"
    }
]

const filterArr = arr.map(item => item.source + item.target).map((item, index, array) => {
    return array.indexOf(item) === index
})
const newArr = arr.filter((item, index) => {
    return filterArr[index]
})

console.log(newArr)

就酱

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