2015-08-28 30 views
0

我試圖通過採取JSON對象,遍歷它,刪除重複和冗餘的數據,並輸出爲了日期(日期戳記在JSON對象中)。如何從JSON數據與純JavaScript,並責令由JSON對象中的最新信息刪除對象重複

細節的列表是:

  1. 輸入數據將在日期順序
  2. 從最新日期的數據應該優選
  3. ID重複計數爲重複。重複的電子郵件被視爲重複。兩者在數據集中都必須是唯一的。其他地方的重複值不計爲重複項。
  4. 如果日期是相同的從記錄列表中提供最後的數據應該是首選

這必須在純JavaScript來完成。這裏是我到目前爲止的代碼:我能夠通過的console.log(看物體)

<html> 
<head> 
<script> 

// Step One load the JSON into a variable 
var Data = {"leads":[ 
{ 
"_id": "jkj238238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "John", 
"lastName": "Smith", 
"address": "123 Street St", 
"entryDate": "2014-05-07T17:30:20+00:00" 
}, 
{ 
"_id": "edu45238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "Ted", 
"lastName": "Masters", 
"address": "44 North Hampton St", 
"entryDate": "2014-05-07T17:31:20+00:00" 
}, 
{ 
"_id": "wabaj238238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "Fran", 
"lastName": "Jones", 
"address": "8803 Dark St", 
"entryDate": "2014-05-07T17:31:20+00:00" 
}, 
{ 
"_id": "jkj238238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "Ted", 
"lastName": "Jones", 
"address": "456 Neat St", 
"entryDate": "2014-05-07T17:32:20+00:00" 
}, 
{ 
"_id": "sel045238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "John", 
"lastName": "Smith", 
"address": "123 Street St", 
"entryDate": "2014-05-07T17:32:20+00:00" 
}, 
{ 
"_id": "qest38238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "John", 
"lastName": "Smith", 
"address": "123 Street St", 
"entryDate": "2014-05-07T17:32:20+00:00" 
}, 
{ 
"_id": "vug789238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "Blake", 
"lastName": "Douglas", 
"address": "123 Reach St", 
"entryDate": "2014-05-07T17:33:20+00:00" 
}, 
{ 
"_id": "wuj08238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "Micah", 
"lastName": "Valmer", 
"address": "123 Street St", 
"entryDate": "2014-05-07T17:33:20+00:00" 
}, 
{ 
"_id": "belr28238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "Tallulah", 
"lastName": "Smith", 
"address": "123 Water St", 
"entryDate": "2014-05-07T17:33:20+00:00" 
}, 
{ 
"_id": "jkj238238jdsnfsj23", 
"email": "[email protected]", 
"firstName": "John", 
"lastName": "Smith", 
"address": "888 Mayberry St", 
"entryDate": "2014-05-07T17:33:20+00:00" 
}] 
}; 
</script> 

</head> 

<body> 

<script type="text/javascript"> 

// Debug console.log 
console.log(Data.leads);  // shows objects in leads array from the Data  Object 
console.log(Data.leads.length);// shows the number length of the leads array 


</script> 


</body> 
</html> 

,但每當我試圖操縱他們,我不斷收到錯誤和不確定的,當我查看輸出。我不清楚這樣做的確切機制。

事先非常感謝,我在我束手無策。

好吧,就這樣擴大我設立的jsfiddle帳戶 link

+0

那怎麼操作呢? – MinusFour

+3

*這必須在純JavaScript中完成。這裏是我迄今爲止的代碼:*對不起,你只有**數據**。顯示一些實際的代碼。 –

+0

堆棧溢出是一個網站,您可以用迄今爲止嘗試過的方式呈現問題。然後我們可以解決這個問題。但是你不能要求我們爲你寫代碼,你必須出示你自己的代碼。 –

回答

0

我已付出你的jsfiddle:http://jsfiddle.net/limowankenobi/pak34wrz/

它仍然需要更多的工作,因爲我剛剛刪除重複項,不考慮日期。您應該可以修改它以根據您的要求使用日期。由陣列(參數column)中的元素的屬性

第一個組的陣列(該參數data):

我已經創建了兩個小的功能。

其結果將是一個對象(一個地圖),其屬性(鍵)是所選擇的列的唯一值,並且每個值將是與該鍵記錄的列表。

function groupBy(column, data) { 
    var groups = {}; 

    data.forEach(function (itm) { 
    groups[itm[column]] = groups[itm[column]] || []; 
    groups[itm[column]].push(itm); 
    }); 

    return groups; 
} 

第二個功能是將列表圖展平。它需要一個對象迭代對象的每個屬性(鍵)並選擇一個元素。在這種情況下,我選擇了第一個元素,但我相信你應該修改這個來根據日期選擇元素。

function uniquify(groups) { 
    var unique = []; 
    for (var key in groups) { 
    if (groups.hasOwnProperty(key)) { 
     unique.push(groups[key][0]); 
    } 
    } 

    return unique; 
} 

通過這種方式,做你需要看起來像什麼功能:

function arrUnique(arr) { 
    var groupsById = groupBy("_id", arr); 
    var uniqueIds = uniquify(groupsById); 
    var groupsByEmail = groupBy("email", uniqueIds); 

    return uniquify(groupsByEmail); 
} 

例如,groupBy("_id", arr)結果是

{ 
"jkj238238jdsnfsj23": [ 
    { 
     "_id": "jkj238238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:30:20+00:00" 
    }, 
    { 
     "_id": "jkj238238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Ted", 
     "lastName": "Jones", 
     "address": "456 Neat St", 
     "entryDate": "2014-05-07T17:32:20+00:00" 
    }, 
    { 
     "_id": "jkj238238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": "888 Mayberry St", 
     "entryDate": "2014-05-07T17:33:20+00:00" 
    } 
], 
"edu45238jdsnfsj23": [ 
    { 
     "_id": "edu45238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Ted", 
     "lastName": "Masters", 
     "address": "44 North Hampton St", 
     "entryDate": "2014-05-07T17:31:20+00:00" 
    } 
], 
"wabaj238238jdsnfsj23": [ 
    { 
     "_id": "wabaj238238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Fran", 
     "lastName": "Jones", 
     "address": "8803 Dark St", 
     "entryDate": "2014-05-07T17:31:20+00:00" 
    } 
], 
"sel045238jdsnfsj23": [ 
    { 
     "_id": "sel045238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:32:20+00:00" 
    } 
], 
"qest38238jdsnfsj23": [ 
    { 
     "_id": "qest38238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:32:20+00:00" 
    } 
], 
"vug789238jdsnfsj23": [ 
    { 
     "_id": "vug789238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Blake", 
     "lastName": "Douglas", 
     "address": "123 Reach St", 
     "entryDate": "2014-05-07T17:33:20+00:00" 
    } 
], 
"wuj08238jdsnfsj23": [ 
    { 
     "_id": "wuj08238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Micah", 
     "lastName": "Valmer", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:33:20+00:00" 
    } 
], 
"belr28238jdsnfsj23": [ 
    { 
     "_id": "belr28238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Tallulah", 
     "lastName": "Smith", 
     "address": "123 Water St", 
     "entryDate": "2014-05-07T17:33:20+00:00" 
    } 
] 
} 

然後對結果調用uniqify通過_id分組我們得到:

[ 
{ 
    "_id": "jkj238238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "John", 
    "lastName": "Smith", 
    "address": "123 Street St", 
    "entryDate": "2014-05-07T17:30:20+00:00" 
}, 
{ 
    "_id": "edu45238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Ted", 
    "lastName": "Masters", 
    "address": "44 North Hampton St", 
    "entryDate": "2014-05-07T17:31:20+00:00" 
}, 
{ 
    "_id": "wabaj238238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Fran", 
    "lastName": "Jones", 
    "address": "8803 Dark St", 
    "entryDate": "2014-05-07T17:31:20+00:00" 
}, 
{ 
    "_id": "sel045238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "John", 
    "lastName": "Smith", 
    "address": "123 Street St", 
    "entryDate": "2014-05-07T17:32:20+00:00" 
}, 
{ 
    "_id": "qest38238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "John", 
    "lastName": "Smith", 
    "address": "123 Street St", 
    "entryDate": "2014-05-07T17:32:20+00:00" 
}, 
{ 
    "_id": "vug789238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Blake", 
    "lastName": "Douglas", 
    "address": "123 Reach St", 
    "entryDate": "2014-05-07T17:33:20+00:00" 
}, 
{ 
    "_id": "wuj08238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Micah", 
    "lastName": "Valmer", 
    "address": "123 Street St", 
    "entryDate": "2014-05-07T17:33:20+00:00" 
}, 
{ 
    "_id": "belr28238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Tallulah", 
    "lastName": "Smith", 
    "address": "123 Water St", 
    "entryDate": "2014-05-07T17:33:20+00:00" 
} 
] 

如果我們現在組這樣的結果通過電子郵件,我們得到:

{ 
"[email protected]": [ 
    { 
     "_id": "jkj238238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:30:20+00:00" 
    }, 
    { 
     "_id": "sel045238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:32:20+00:00" 
    }, 
    { 
     "_id": "qest38238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:32:20+00:00" 
    }, 
    { 
     "_id": "wuj08238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Micah", 
     "lastName": "Valmer", 
     "address": "123 Street St", 
     "entryDate": "2014-05-07T17:33:20+00:00" 
    } 
], 
"[email protected]": [ 
    { 
     "_id": "edu45238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Ted", 
     "lastName": "Masters", 
     "address": "44 North Hampton St", 
     "entryDate": "2014-05-07T17:31:20+00:00" 
    }, 
    { 
     "_id": "belr28238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Tallulah", 
     "lastName": "Smith", 
     "address": "123 Water St", 
     "entryDate": "2014-05-07T17:33:20+00:00" 
    } 
], 
"[email protected]": [ 
    { 
     "_id": "wabaj238238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Fran", 
     "lastName": "Jones", 
     "address": "8803 Dark St", 
     "entryDate": "2014-05-07T17:31:20+00:00" 
    } 
], 
"[email protected]": [ 
    { 
     "_id": "vug789238jdsnfsj23", 
     "email": "[email protected]", 
     "firstName": "Blake", 
     "lastName": "Douglas", 
     "address": "123 Reach St", 
     "entryDate": "2014-05-07T17:33:20+00:00" 
    } 
] 
} 

最後將在此uniqify導致:

[ 
{ 
    "_id": "jkj238238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "John", 
    "lastName": "Smith", 
    "address": "123 Street St", 
    "entryDate": "2014-05-07T17:30:20+00:00" 
}, 
{ 
    "_id": "edu45238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Ted", 
    "lastName": "Masters", 
    "address": "44 North Hampton St", 
    "entryDate": "2014-05-07T17:31:20+00:00" 
}, 
{ 
    "_id": "wabaj238238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Fran", 
    "lastName": "Jones", 
    "address": "8803 Dark St", 
    "entryDate": "2014-05-07T17:31:20+00:00" 
}, 
{ 
    "_id": "vug789238jdsnfsj23", 
    "email": "[email protected]", 
    "firstName": "Blake", 
    "lastName": "Douglas", 
    "address": "123 Reach St", 
    "entryDate": "2014-05-07T17:33:20+00:00" 
} 
]