从数组中删除重复项,但注释剩余的行,其他行

时间:2017-03-03 01:54:11

标签: jquery arrays duplicates splice

我有一份每日报道的报纸文章清单。因为很多报纸都是大型连锁店的一部分,所以我不想看到同一篇文章的每一个版本,但我们确实希望看到它带有多少其他商店。

所以......这是我想要看到的

第1条 来源 - 国家邮报,同样在纽约时报的西雅图布莱兹

第2条 来源 - 华盛顿邮报

我正在使用此代码成功完成此操作..但它看起来很笨拙

示例JSON

    var data = {
        "articles": [
                    {
                        "id": "1",
                        "title": "xxxx'",
                        "body": "<p>Body goes here",
                        "publication": {
                            "id": 1,
                            "name": "National Post"
                        },
                        "articleUrl": "http://www.foo.com/1"
                    },
                    {
                        "id": "2",
                        "title": "yyyy'",
                        "body": "<p>Body goes here",
                        "publication": {
                            "id": 1,
                            "name": "Washington Post"
                        },
                        "articleUrl": "http://www.foo.com/2"
                    },
                    {
                        "id": "3",
                        "title": "xxxx'",
                        "body": "<p>Body goes here",
                        "publication": {
                            "id": 1,
                            "name": "Seattle Blaze"
                        },
                        "articleUrl": "http://www.foo.com/3"
                    },
                    {
                        "id": "4",
                        "title": "xxxx'",
                        "body": "<p>Body goes here",
                        "publication": {
                            "id": 1,
                            "name": "New York Times"
                        },
                        "articleUrl": "http://www.foo.com/4"
                    }
                ]
            }


js.utils.RemoveDups = function RemoveDups(json) {

var articles = new Array();
for (var i = 0; i < json.length; i++) {
    var seen = false;
    for (var j = 0; j != articles.length; ++j) {

        if (json[i] != null && articles[j] != null) {
            if (articles[j].title == json[i].title) {
                seen = true;

                articles[j].publication.name = articles[j].publication.name + ", <a href='" + json[i].articleUrl + "' target='_blank'>" + json[i].publication.name + '</a>';
            }
        }
    }
    if (!seen) articles.push(json[i]);
}
return articles;
};

我现在正在搞乱这段代码,这段代码更紧凑,速度更快,但因为我没有来自

的Full对象
dataArr = data.map(function (item) { return item.title });

我无法返回当前的发布名称我正在删除

//Clean the Data
if (json != null) {

    var data = json.articles,
    dataArr = data.map(function (item) { return item.title });

    //Remove Duplicates
    dataArr.some(function (item, index) {
        var isDuplicate = dataArr.indexOf(item, index + 1) !== -1;
        if (isDuplicate) {
            data[index].publication.name = data[index].publication.name + ',' + item[index].publication.name //<- dont have full object
            data = removeDuplicate(data, item);
        }
    });
 function removeDuplicate(data, title) {
  $.each(data, function (index) {
    if (this.title == title) {
        data.splice(index, 1);
        return false;
    }
  });
 return data;
 }

:Bonus Question ...我不完全确定机器使用什么参数来确定要保留哪个副本以及要删除哪个副本...理想情况下,我想保留项目对象的项目(项目) .wordCount)wordCount是最高的...

1 个答案:

答案 0 :(得分:1)

首先不要使用数组,使用其键是文章标题的对象。

js.utils.RemoveDups = function RemoveDups(json) {
    var articles = {};
    json.articles.forEach(function(a) {
        if (a.title in articles) {
            articles[a.title].publication.name += ', ' + a.publication.name;
        } else {
            articles[a.title] = a;
        }
    });
    return articles;
}

如果您需要将结果转回数组,请将return articles;替换为:

    return Object.keys(articles).map(function(title) {
        return articles[title];
    });