簡體   English   中英

使用Node.js規范對象數組中的缺失值

[英]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.reducehash 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM