2017-09-27 87 views
1

我有一個帶有重複ID的對象數組。與id關聯的每個對象都具有屬性A和屬性B.對於每個循環,第一個索引數組的屬性A具有值,但屬性B爲null。在第二個索引數組中,屬性A爲null,屬性B爲值。前兩個索引將根據相同的ID進行合併。輸出不會產生屬性A和屬性B的值,但其中任何一個仍然爲空。如何分配屬性如果爲空

陣列

{ 
id: 123, 
    A: 「value A1」 
    B: null 
}, 
{ 
    id: 123, 
    A: null, 
    B: 「value b」 
}, 
{ 
    id: 123, 
    A: 「value A2」 
    B: null 
}, 
{ 
    id: 456, 
    A: "a2 value", 
    B: "b2 value" 
} 

代碼

var output = _.groupBy(arr, function(o){ 
    return o.id; 
}) 

輸出

{ 
    id: 123, 
    A: [「value A1」,「value A2」] 
    B: null 
}, 
{ 
    id: 456, 
    A: ["a2 value"], 
    B: "b2 value" 
} 

精通ected

{ 
    id: 123, 
    A: [「value A1」,「value A2」] 
    B: 「value b」 
}, 
{ 
    id: 456, 
    A: ["a2 value"], 
    B: "b2 value" 
} 

回答

1

你可以做到這一點,沒有下劃線和loadash:

var arr = [ 
 
    { 
 
     id: 123, 
 
     A: "value A1", 
 
     B: null 
 
    }, 
 
    { 
 
     id: 123, 
 
     A: null, 
 
     B: "value b" 
 
    }, 
 
    { 
 
     id: 123, 
 
     A: "value A2", 
 
     B: null 
 
    }, 
 
    { 
 
     id: 456, 
 
     A: "a2 value", 
 
     B: "b2 value" 
 
    }  
 
]; 
 

 
var arr2 = arr.reduce((m, o) => { 
 
    var sameObj = m.find(it => it.id === o.id); 
 
    if (sameObj) { 
 
     o.A && (sameObj.A.push(o.A)); 
 
     sameObj.B = sameObj.B || o.B; 
 
    } else { 
 
     o.A = o.A ? [o.A] : []; 
 
     m.push(o); 
 
    } 
 
    return m; 
 
}, []); 
 

 
console.log(arr2);

+0

我更新了新的輸入,'a'屬性將返回一個數組而不是字符串。 –

+0

我更新了答案 – Faly

0

以下是沒有underscorelodash。只需用香草JavaScript

var data = [{ 
 
    id: 123, 
 
    A: "some value", 
 
    B: null 
 
    }, 
 
    { 
 
    id: 123, 
 
    A: null, 
 
    B: "b value" 
 
    }, 
 
    { 
 
    id: 456, 
 
    A: "a2 value", 
 
    B: "b2 value" 
 
    } 
 
]; 
 

 
var outputObject = {}, 
 
    outputArray = []; 
 

 
data.forEach(function(obj) { 
 

 
    if (!outputObject[obj.id]) { 
 
    outputObject[obj.id] = obj; 
 
    } else { 
 
    if (obj.B !== null) { 
 
     outputObject[obj.id].B = obj.B; 
 
    } 
 
    if (obj.A !== null) { 
 
     outputObject[obj.id].A = obj.A; 
 
    } 
 
    } 
 

 
}); 
 

 
//Convert to an array 
 
Object.keys(outputObject).forEach(function(key) { 
 
    outputArray.push(outputObject[key]); 
 
}); 
 

 
console.log(outputArray);

+0

我更新的新輸入的 'a' 屬性將返回一個數組,而不是串。 –