[英]Array of objects, removing duplicates but storing values (i.e. grouping)
我目前正在處理數據庫中的客戶退貨清單。
將客戶另存為從兩個聯接表構建的對象。 由於在我的First Normal表單數據庫中沒有像數組這樣的結構,所以聯接的表返回重復項。
所以考慮這樣的數組
var customers = [
{id : 1, firstname : 'John', lastname : 'Doe', interest : 'Cars'},
{id : 1, firstname : 'John', lastname : 'Doe', interest : 'Computers'},
{id : 1, firstname : 'John', lastname : 'Doe', interest : 'Babes'},
{id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Food'},
{id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Toys'},
{id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Cake'}];
我一直在瘋狂地嘗試,但是我只能找到在沒有對象[1,2,3]
等的簡單數組中刪除重復項的示例。
最終,我想做的是刪除重復項,但要節省利息。 給定上面的示例數組,這樣的對象列表。
var reduced =[
{id : 1, firstname : 'John', lastname : 'Doe' interests : ['Cars', 'Computers', 'Babes']},
{id : 2, firstname : 'Frank', lastname : 'Smith' interests : ['Food', 'Toys', 'Cake']}];
到目前為止,我已嘗試刪除此類重復項
for(var i = 0; i < newCustomersArray.length; i++){
console.log(i)
if(i == 0){
console.log('i = 0, customerId ' + newCustomersArray[i].firstname)
data.customers.push(newCustomersArray[i]);
}
//else if(newCustomersArray[i-1].customerId != newCustomersArray[i].customerId){
//
//}
else if( newCustomersArray[i-1].customerId != newCustomersArray[i].customerId){
//console.log(newCustomersArray[i-1].customerId + " == " + newCustomersArray[i].customerId);
console.log('i = '+i+', customerId ' + newCustomersArray[i].firstname)
data.customers.push(newCustomersArray[i]);
}
}
您可以使用某些Array方法來構建新數組,例如Array.prototype.forEach()
forEach()
方法每個數組元素執行一次提供的函數。
some()
方法測試數組中的某些元素是否通過提供的函數實現的測試。
var customers = [ { id: 1, firstname: 'John', lastname: 'Doe', interest: 'Cars' }, { id: 1, firstname: 'John', lastname: 'Doe', interest: 'Computers' }, { id: 1, firstname: 'John', lastname: 'Doe', interest: 'Babes' }, { id: 2, firstname: 'Frank', lastname: 'Smith', interest: 'Food' }, { id: 2, firstname: 'Frank', lastname: 'Smith', interest: 'Toys' }, { id: 2, firstname: 'Frank', lastname: 'Smith', interest: 'Cake' } ], reduced = []; customers.forEach(function (a) { !reduced.some(function (b) { if (a.id === b.id) { b.interests.push(a.interest); return true; } }) && reduced.push({ id: a.id, firstname: a.firstname, lastname: a.lastname, interests: [a.interest] }); }); document.write('<pre>' + JSON.stringify(reduced, 0, 4) + '</pre>');
對客戶對象使用array.reduce方法可消除重復項。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
請參考下面的代碼示例
var customers = [ {id : 1, firstname : 'John', lastname : 'Doe', interest : 'Cars'}, {id : 1, firstname : 'John', lastname : 'Doe', interest : 'Computers'}, {id : 1, firstname : 'John', lastname : 'Doe', interest : 'Babes'}, {id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Food'}, {id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Toys'}, {id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Cake'}]; var temp = customers.reduce(function(o,n){ o = o || {}; if(!o[n.firstname+n.lastname+n.id]){ o[n.firstname+n.lastname+n.id] = n; o[n.firstname+n.lastname+n.id].interest = [] } o[n.firstname+n.lastname+n.id].interest.push(n.interest); return o; },{}); customers = Object.keys(temp).map(function(k) { return temp[k] }) console.log(customers);
使用具有唯一鍵的對象來消除重復項:
var tempObj = {};
for(i=0; i<customers.length;i++){
if(tempObj[customers[i].id] == undefined){
tempObj[customers[i].id] = customers[i];
}
else{
tempObj[customers[i].id].interest = tempObj[customers[i].id].interest + ","+customers[i].interest;
}
}
您可以編寫簡單的邏輯,
var customers = [
{id : 1, firstname : 'John', lastname : 'Doe', interest : 'Cars'},
{id : 1, firstname : 'John', lastname : 'Doe', interest : 'Computers'},
{id : 1, firstname : 'John', lastname : 'Doe', interest : 'Babes'},
{id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Food'},
{id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Toys'},
{id : 2, firstname : 'Frank', lastname : 'Smith', interest : 'Cake'}];
for (var i=0;i<customers.length;i++){
var intrest=[customers[i].interest];
for (var j=i+1; j<customers.length; j++)
{
if (customers[i].id == customers[j].id){
intrest.push(customers[j].interest);
customers.splice(j,1);
j--;
}
}
customers[i].interest=intrest;
}
console.log(JSON.stringify(customers));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.