2016-09-09 24 views
3

私は、カテゴリキーの値が同じであるオブジェクトの配列を変換するため、最短で最も美しい道を見つけたいとオブジェクトをマージする必要があります同じカテゴリからグループ化されたラベル:同じキーが異なる値

[{ 
    "label": ["Apple", "Orange"], 
    "category": "Fruits" 
}, { 
    "label": ["Potato", "Tomato"], 
    "category": "Vegetables" 
}, { 
    "label": ["Cherry"], 
    "category": "Berries" 
}] 

答えて

4

あなたはハッシュテーブルとグループとしてカテゴリをオブジェクトを使用することができます。ここで

var data = [{ "label": "Apple", "category": "Fruits" }, { "label": "Orange", "category": "Fruits" }, { "label": "Potato", "category": "Vegetables" }, { "label": "Tomato", "category": "Vegetables" }, { "label": "Cherry", "category": "Berries" }], 
 
    grouped = []; 
 

 
data.forEach(function (a) { 
 
    if (!this[a.category]) { 
 
     this[a.category] = { label: [], category: a.category }; 
 
     grouped.push(this[a.category]); 
 
    } 
 
    this[a.category].label.push(a.label); 
 
}, Object.create(null)); 
 

 
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

ありがとうございました!!! – daslashi

1

問題

var result = []; 
 
var input = [{ 
 
    "label": "Apple", 
 
    "category": "Fruits" 
 
}, { 
 
    "label": "Orange", 
 
    "category": "Fruits" 
 
}, { 
 
    "label": "Potato", 
 
    "category": "Vegetables" 
 
}, { 
 
    "label": "Tomato", 
 
    "category": "Vegetables" 
 
}, { 
 
    "label": "Cherry", 
 
    "category": "Berries" 
 
}]; 
 
var cat = []; 
 
for(i = 0; i < input.length; i++) { 
 
    if(!cat[input[i].category]) { 
 
    cat[input[i].category] = {category: input[i].category, label:[input[i].label]}; 
 
    result.push(cat[input[i].category]); 
 
    } else { 
 
    cat[input[i].category].label.push(input[i].label); 
 
    } 
 
} 
 
console.log(result);

2

を解決するための私の試みは、ここで私は、この使用してlodashを行うだろう方法ですされています

_(coll) 
    .groupBy('category') 
    .map((v, k) => ({ 
    category: k, 
    label: _.map(v, 'label') 
    })) 
    .value() 

基本的にgroupBy()は、キーとして一意のカテゴリを持つオブジェクトを作成します。次に、map()は、このオブジェクトを配列に戻します。ここでは、各項目に必要な構造があります。

関連する問題