[英]How to groupBy object using lodash?
我正在使用 ReactJS。 我有一個看起來像這樣的對象:
{
autumn=firstContactPersonName: "John",
autumn=firstContactPersonPhone: "46442644",
autumn=secondContactPersonName: "Jhonny",
autumn=secondContactPersonPhone: "46442644",
christmas=firstContactPersonName: "Tommy",
christmas=firstContactPersonPhone: "46442644",
christmas=secondContactPersonPhone: "Thomas",
winter=firstContactPersonPhone: "46442644",
winter=firstContactPersonName: "Peter",
winter=secondContactPersonName: "Tom",
winter=secondContactPersonPhone: "44664455"
}
我如何根據autumn
、 christmas
、 winter
對它們進行分組。 因此,與一個對象autumn
有autumn
場,第二個christmas
有christmas
場,而第三個winter
有winter
領域?
等等。 所有字段在=
之前都會有一個段名稱,所以我可以很容易地看到它們屬於什么類型的段。
您可以通過循環對象中的鍵來生成組。 在=
上拆分鍵並捕獲結果。 第一個元素應該是組,第二個是要在該組內訪問的屬性。
如果組尚不存在,則創建一個新對象。 然后將組內的屬性設置為等於原始對象的值。
const input = { "autumn=firstContactPersonName": "John", "autumn=firstContactPersonPhone": "46442644", "autumn=secondContactPersonName": "Jhonny", "autumn=secondContactPersonPhone": "46442644", "christmas=firstContactPersonName": "Tommy", "christmas=firstContactPersonPhone": "46442644", "christmas=secondContactPersonPhone": "Thomas", "winter=firstContactPersonPhone": "46442644", "winter=firstContactPersonName": "Peter", "winter=secondContactPersonName": "Tom", "winter=secondContactPersonPhone": "44664455" }; const output = {}; for (const key in input) { const [season, property] = key.split("=", 2); if (!output[season]) output[season] = {}; output[season][property] = input[key]; } console.log(output);
我發現我的解釋有點混亂,但我希望結合代碼片段你明白我在說什么。
這可以通過純 JS 實現,不需要 lodash(我不熟悉)。
此函數獲取輸入對象的每個屬性,圍繞季節部分(前綴)和其余部分(附錄)的等號拆分鍵。 之后它會在輸出數組中查找具有相同季節的對象並將屬性添加到其中。 如果沒有指定季節的對象,則創建一個新對象。
function processData(inputObj) {
var data = [];
for (var key in inputObj) {
var prefix = key.split("=")[0];
var appendix = key.split("=")[1];
var dataObject = data.find(o => o.season == prefix);
if (!dataObject) {
dataObject = {season: prefix};
data.push(dataObject);
}
dataObject[appendix] = inputObj[key];
}
return { data };
}
產生這個輸出:
{
"data": [
{
"season": "autumn",
"firstContactPersonName": "John",
"firstContactPersonPhone": "46442644",
"secondContactPersonName": "Jhonny",
"secondContactPersonPhone": "46442644"
},
{
"season": "christmas",
"firstContactPersonName": "Tommy",
"firstContactPersonPhone": "46442644",
"secondContactPersonPhone": "Thomas"
},
{
"season": "winter",
"firstContactPersonPhone": "46442644",
"firstContactPersonName": "Peter",
"secondContactPersonName": "Tom",
"secondContactPersonPhone": "44664455"
}
]
}
使用Object.entries()
生成 [key, value] 對的數組,並使用Array.reduce()
進行迭代。 對於每一對,用=
分割鍵以獲得組鍵和值鍵,如果不存在則創建組的對象,並將值分配給對象。
const data = {"autumn=firstContactPersonName":"John","autumn=firstContactPersonPhone":"46442644","autumn=secondContactPersonName":"Jhonny","autumn=secondContactPersonPhone":"46442644","christmas=firstContactPersonName":"Tommy","christmas=firstContactPersonPhone":"46442644","christmas=secondContactPersonPhone":"Thomas","winter=firstContactPersonPhone":"46442644","winter=firstContactPersonName":"Peter","winter=secondContactPersonName":"Tom","winter=secondContactPersonPhone":"44664455"} const result = Object.entries(data) .reduce((r, [k, v]) => { const [gKey, key] = k.split('=') // get the key r[gKey] = r[gKey] || {} // generate the object if it doesn't exist r[gKey][key] = v // assign the value to the object return r }, {}) console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.