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