2013-05-21 3 views
0

Я пытался объединить количество имен названий и из разных источников заголовков. Мне удавалось удалять дубликаты из массива объектов и отображать только оригинальную версию заголовка из каждого источника только один раз без каких-либо дубликатов. Но мне не удалось показать подробно, сколько дубликатов названий названий было в json. Как здесь, у нас есть по 4 от каждого. Но я не смог получить полное дублирование. Часть - это состояние elseifExistFlag, которое Ive добавил в код. Я также добавить ссылку скрипкунахождение числа вхождений той же строки, хранящейся в массиве объектов

http://jsfiddle.net/wF4qX/5/

var inputJson = [{ 
     "Sources": [{ 
      "title": "Title Name", 
      "source": "SourceName1", 
      "date": "07-05-2013 00:38:40", 
      "link": "Link to 1" 
     }, { 
      "title": "Title Name", 
      "date": "07-05-2013 00:24:17", 
      "source": "SourceName2", 
      "link": "Link to 2" 
     } 
     ] 
    }, { 
     "Sources": [{ 
      "title": "Title Name", 
      "source": "SourceName1", 
      "date": "07-05-2013 00:38:40", 
      "link": "Link to 1" 
     }, { 
      "title": "Title Name", 
      "date": "07-05-2013 00:24:17", 
      "source": "SourceName2", 
      "link": "Link to 2" 
     } 
     ] 
    }, { 
     "Sources": [{ 
      "title": "Title Name", 
      "source": "SourceName1", 
      "date": "07-05-2013 00:38:40", 
      "link": "Link to 1" 
     }, { 
      "title": "Title Name", 
      "date": "07-05-2013 00:24:17", 
      "source": "SourceName2", 
      "link": "Link to 2" 
     } 
     ] 
    }, { 
     "Sources": [{ 
      "title": "Title Name", 
      "source": "SourceName1", 
      "date": "07-05-2013 00:38:40", 
      "link": "Link to 1" 
     }, { 
      "title": "Title Name", 
      "date": "07-05-2013 00:24:17", 
      "source": "SourceName2", 
      "link": "Link to 2" 
     } 
     ] 
    } 
    ] 
    $(document).ready(function() { 
    var sourceList = AggregateSource(inputJson); 
    var sourcePrint = printFinalSourceData(sourceList); 
    $("#output").html(sourcePrint); 
    }); 



    function AggregateSource(sourceArray, number) { 
    var l = {}; 
    var finalArray = []; 
    for (var i = 0; i < sourceArray.length; i++) { 
     for (var j = 0; j < sourceArray[i].Sources.length; j++) { 
     if (l.hasOwnProperty(sourceArray[i].Sources[j].source) == false) { 
      l[sourceArray[i].Sources[j].source] = []; 
      var m = {}; 
      m["title"] = sourceArray[i].Sources[j].title; 
      m["link"] = sourceArray[i].Sources[j].link; 
      m["date"] = sourceArray[i].Sources[j].timeStamp; 
      m["count"] = 1; 
      l[sourceArray[i].Sources[j].source].push(m); 
     } else { 
      var ifExistFlag = true; 
      for (var k = 0; k < l[sourceArray[i].Sources[j].source].length; k++) { 
      if (l[sourceArray[i].Sources[j].source][k]["title"] == sourceArray[i].Sources[j].title) { 
       ifExistFlag = false; 
      } 
      } 
      if (ifExistFlag == true) { 
      m["title"] = sourceArray[i].Sources[j].title; 
      m["date"] = sourceArray[i].Sources[j].timeStamp; 
      m["link"] = sourceArray[i].Sources[j].link; 
      l[sourceArray[i].Sources[j].source].push(m); 
      } else { 
      // alert(l[sourceArray[i].Sources[j].source][j]["count"]) 
      } 
     } 
     } 
    } 
    finalArray.push(l); 
    return finalArray; 
    } 



    function printFinalSourceData(inputArray) { 
    var sourceHTML = ''; 
    for (var k = 0; k < inputArray.length; k++) { 
     for (key in inputArray[k]) { 
     for (var i = 0; i < inputArray[k][key].length; i++) { 
      sourceHTML += "<span style='width:80%; float:left; font-size:14px;'><a href='" + inputArray[k][key][i].link + "' target='_blank' style='text-decoration:none; color:#333333; font-weight:bold;'>" + inputArray[k][key][i].title + "</a></span><br><span style='width:80%;float:left; font-size:10px; color: #3f4041;'>" + key.split("_").join(" "); + "</span><br>"; 
     } 
     } 
    } 
    return sourceHTML; 
    } 
+1

'inputJson' - это _not_ JSON! Это массив объектов, определенных с использованием синтаксиса литералов объекта javascript. JSON представляет собой * строку * представление объектов javascript. –

ответ

1

Это не JSON, это массив Javascript. JSON - это текстовый формат для представления данных.

Ваша переменная ifExistFlag всегда будет ложной. Если вы попадаете в else, вы уже знаете, что уже существует один элемент с тем же источником, и даже если это не так, когда j и k равны, вы будете сравнивать этот элемент с самим собой. Как вы уже знаете в тот момент, что уже существует элемент с тем же источником, проверка вообще не нужна.

Вместо того, чтобы толкать объекты в массив, поместите объект в объект l, а когда вы найдете другого с тем же источником, вы просто увеличите счетчик. Наконец, просто возвращает объект l вместо того, толкая все это само по себе в массив:

function AggregateSource(sourceArray, number) { 
    var l = {}; 
    for (var i = 0; i < sourceArray.length; i++) { 
    var s = sourceArray[i].Sources; 
    for (var j = 0; j < s.length; j++) { 
     if (!l.hasOwnProperty(s[j].source)) { 
     l[s[j].source] = { 
      title: s[j].title, 
      link: s[j].link: 
      date: s[j].timeStamp, 
      count: 1 
     }; 
     } else { 
     l[s[j].source].count++; 
     } 
    } 
    } 
    return l; 
} 

Как у вас есть объект, содержащий объекты, а не массив, содержащий объект с массивами объектов, существует гораздо меньше перекручивание требуется в printFinalSourceData функции:

function printFinalSourceData(inputArray) { 
    var sourceHTML = ''; 
    for (key in inputArray) { 
    sourceHTML += 
     "<span style='width:80%; float:left; font-size:14px;'>" + 
     "<a href='" + inputArray[key].link + "' target='_blank' style='text-decoration:none; color:#333333; font-weight:bold;'>" + 
     inputArray[key].title + 
     "</a></span><br>" + 
     "<span style='width:80%;float:left; font-size:10px; color: #3f4041;'>" + 
     key.split("_").join(" "); + 
     "</span><br>"; 
    } 
    return sourceHTML; 
} 

вы можете использовать inputArray[key].count, если вы хотите, чтобы показать количество найденных элементов для каждого источника.

+0

спасибо большое ... это сработало .. – user1371896

Смежные вопросы