繁体   English   中英

将对象数组简化为对象对象

[英]Reduce Array of objects to object of objects

我想将对象数组转换为对象对象。

我的资料:

var pools = [{
    dce: 3,
    lts: 2,
    name: "nift nation",
  },
  {
    dce: 1049.99,
    lts: 104.999,
    name: "NSG I.NS. Mark Select",
  },
  {
    dce: 162,
    lts: 36.157,
    name: "Shift-Team Mark Select",
  }
]

所需的输出:

{
  nift_nation: {
    nift_nationDollars: "",
    nift_nationUnits: "",
    nift_nationPercentage: ""
  },
  NSG_I$NS$_Mark_Select: {
    NSG_I$NS$_Mark_SelectDollars: "",
    NSG_I$NS$_Mark_SelectUnits: "",
    NSG_I$NS$_Mark_SelectPercentage: ""
  },
  Shift__Team_Mark_Select: {
    Shift__Team_Mark_SelectDollars: "",
    Shift__Team_Mark_SelectUnits: "",
    Shift__Team_Mark_SelectPercentage: ""
  }
}

 var pools = [{ dce: 3, lts: 2, name: "nift nation", }, { dce: 1049.99, lts: 104.999, name: "NSG I.NS. Mark Select", }, { dce: 162, lts: 36.157, name: "Shift-Team Mark Select", } ] var suffixArray = ["Dollars", "Percentage", "Units"]; var getFieldSuffix = function(rowFieldCount) { switch (rowFieldCount) { case 0: return 'Dollars'; case 1: return 'Units'; case 2: return 'Percentage'; default: return } }; var replacementMap = { single_space: '_', dot: '$', hyphen: '__', }; var replacer = function(str) { return str.replace(/[ .-]/g, l => { if (l == ".") return replacementMap["dot"]; if (l == " ") return replacementMap["single_space"]; return replacementMap["hyphen"]; }); }; var formStructure = function dataFormatter(collection, suffixArr) { const data = collection.map(pool => Object.assign({ [replacer(pool.name)]: suffixArr.reduce((acc, suffix, index) => { acc[replacer(pool.name) + getFieldSuffix(index % 3)] = ''; return acc; }, {}), })); return Object.assign({}, ...data); //Extra step, I don't think this is the best way } var arrObj = formStructure(pools, suffixArray); console.log(arrObj) 

我得到所需的输出。 formStructure函数中,我将对象数组存储在变量data ,然后在下一步中return Object.assign({}, ...data); ,我将其转换为对象的Object 这种方法不是最佳的。

我希望能够获取变量data本身中的对象的Object

您可以使用与在suffixArr collection上已经使用的完全相同的reduce方法:

function formStructure(collection, suffixArr) {
  return collection.reduce(acc, pool) => {
    acc[replacer(pool.name)] = suffixArr.reduce((acc, suffix, index) => {
      acc[replacer(pool.name) + getFieldSuffix(index % 3)] = '';
      return acc;
    }, {});
    return acc;
  }, {});
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM