JavaScript检查数组中的某些内容是否唯一

JavaScript检查数组中的某些内容是否唯一,javascript,Javascript,我一直在搜索SO和google,但我不知道该怎么做。我正在创建我自己的小应用程序,它使用ajax和YahooAPI带回RSS提要信息并显示到页面上,它带回标题、描述、缩略图和GUID。 目前的问题是,在带有图像的数组中返回的数据是重复的,因此我的想法是“检查guid,如果它们不是唯一的,则删除一个”,但我尝试的方法不起作用。任何建议都将不胜感激 这就是我获取数据的方式,将xml转换为JSON,JSON将包含属性“title、description、pubdate、thumbnail和guid”

我一直在搜索SO和google,但我不知道该怎么做。我正在创建我自己的小应用程序,它使用ajax和YahooAPI带回RSS提要信息并显示到页面上,它带回标题、描述、缩略图和GUID。 目前的问题是,在带有图像的数组中返回的数据是重复的,因此我的想法是“检查guid,如果它们不是唯一的,则删除一个”,但我尝试的方法不起作用。任何建议都将不胜感激

这就是我获取数据的方式,将xml转换为JSON,JSON将包含属性“title、description、pubdate、thumbnail和guid”

重复处理

handlebars.registerHelper("removeDuplicate", function(results) {
    var a = results;
    var b = results.guid;
    var i = 2;

    foreach(b in a) {
        if( b.count != 1) {
            b--;
        }
    }
});

您可以按如下方式进行筛选:

var uniques = [];    

results.forEach(function(result)) {
    var control = true;
    uniques.forEach(function(single) {
       if(single.guid == result.guid) control = false;
       if(control) uniques.push(result);
    })
}

您可以使用
Array.prototype.reduce
,快速(草率)示例:


为了解决重复的问题,我已经像以前一样编写了一个Handlebar助手,但是经过一些调整,现在它可以按预期工作,如果项目在数组中,则只返回[0]项目

handlebars.registerHelper("rssFeed", function(results) {
    var a = results;        

    if(Array.isArray(a)) {
        return a[0];
    }
    else {
        return a;
    }       
});

请添加一些示例数据。我已经添加了获取数据的方式,因为数组中每个对象的数据都不同,我希望这足够好吗?因为我没有写出数组,所以我只能说,在chrome开发工具中,它们都是字符串数据。在这种情况下,push做了什么?当结果数组当前对象不等于uniques中的任何记录时,push从结果数组推到uniques数组。我没有对它进行否决,所以我不确定。我有点担心尝试这一点,因为我不确定“push”关键字在空数组中减少传递的是什么。如果不是重复项,则将该项推送到缩减数组,然后返回它,否则只返回缩减数组而不返回重复值。好吧,我会玩一玩,看看能不能让这样的东西发挥作用:)
handlebars.registerHelper("removeDuplicate", function(results) {
  return results.reduce(function(arr, item) {
    var unique = true;
    arr.forEach(function(i) {
      if (i.guid === item.guid) unique = false;
    });
    if (!unique) return arr;
    arr.push(item);
    return arr;
  }, []);
});
handlebars.registerHelper("rssFeed", function(results) {
    var a = results;        

    if(Array.isArray(a)) {
        return a[0];
    }
    else {
        return a;
    }       
});