[英]Normalize missing value inside an array of objects with nodejs
我有這個數據場景:
var data = [
{
'name': 'social-button',
'group': null
}, {
'name': 'social-button',
'group': null
}, {
'name': 'social-button',
'group': 'buttons'
}, {
'name': 'social-button',
'group': null
}, {
'name': 'icon',
'group': 'icons'
}, {
'name': 'other',
'group': null
}, {
'name': 'icon',
'group': null
}
];
我想將此數據標准化為:
var data = [
{
'name': 'social-button',
'group': 'buttons'
}, {
'name': 'social-button',
'group': 'buttons'
}, {
'name': 'social-button',
'group': 'buttons'
}, {
'name': 'social-button',
'group': 'buttons'
}, {
'name': 'icon',
'group': 'icons'
}, {
'name': 'other',
'group': null
}, {
'name': 'icon',
'group': 'icons'
}
];
因此,基本上,我想確保每個具有相同name
元素也應具有相同的group
,即使相同的一個具有一個。
是否存在某些節點模塊可以幫助解決這一問題?
也許,是否存在一些明智的方法?
您可以使用兩個循環,一個循環收集哈希表中的值,另一個循環進行賦值。
var data = [{ 'name': 'social-button', 'group': null }, { 'name': 'social-button', 'group': null }, { 'name': 'social-button', 'group': 'buttons' }, { 'name': 'social-button', 'group': null }, { 'name': 'icon', 'group': 'icons' }, { 'name': 'other', 'group': null }, { 'name': 'icon', 'group': null }], hash = Object.create(null); data.forEach(function (a) { hash[a.name] = hash[a.name] || a.group; }); data.forEach(function (a) { a.group = a.group || hash[a.name]; }); console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以先sort()
數組進行sort()
以便具有組值的對象首先出現,然后使用map()
創建新數組。 您可以使用Object.assign()
克隆對象,以便不更改原始數據。
var data = [{"name":"social-button","group":null},{"name":"social-button","group":null},{"name":"social-button","group":"buttons"},{"name":"social-button","group":null},{"name":"icon","group":"icons"},{"name":"other","group":null},{"name":"icon","group":null}] var result = data.sort((a, b) => b.group != null).map(function(o) { if (!this[o.name]) { this[o.name] = o.group return o } else { var obj = Object.assign({}, o); obj.group = this[o.name]; return obj } }, {}) console.log(result)
您可以通過這樣做,在一個通 Array.prototype.reduce
和hash table
-見下面的演示:
var data=[{'name':'social-button','group':null},{'name':'social-button','group':null},{'name':'social-button','group':'buttons'},{'name':'social-button','group':null},{'name':'icon','group':'icons'},{'name':'other','group':null},{'name':'icon','group':null}]; var result = data.reduce((function(hash){ return function(p,c) { hash[c.name] = hash[c.name] || c; if(c.group) hash[c.name].group = c.group; p.push(hash[c.name]); return p; }; })(Object.create(null)), []); console.log(JSON.stringify(result));
.as-console-wrapper{top:0;max-height:100%!important;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.