Javascript 映射数组元素和返回对象
我有这样一个对象数组:Javascript 映射数组元素和返回对象,javascript,Javascript,我有这样一个对象数组: 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 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池=[{
dce:3,
lts:2,
名称:“nift国家”,
},
{
dce:1049.99,
lts:104.999,
名称:“NSG识别号标记选择”,
},
{
dce:162,
lts:36.157,
名称:“班组标记选择”,
}
]
var getFieldSuffix=函数(rowFieldCount){
开关(rowFieldCount){
案例0:
返回“美元”;
案例1:
返回“单位”;
案例2:
返回“百分比”;
违约:
返回
}
};
var replacementMap={
单_空间:'',
点:“$”,
连字符:'''''',
};
var replacer=函数(str){
返回str.replace(/[.-]/g,l=>{
if(l==“)返回replacementMap[“点”];
if(l==“”)返回replacementMap[“single_space”];
返回replacementMap[“连字符”];
});
};
var arrObj=pools.map(函数(池){
返回Object.assign({
[replacer(pool.name)]:[‘美元’、‘单位’、‘百分比’].map(函数(后缀、索引){
返回{
[replacer(pool.name)+getFieldSuffix(索引%3)]:“”
}
})
})
})
console.log(arrObj)
var池=[{
dce:3,
lts:2,
名称:“nift国家”,
},
{
dce:1049.99,
lts:104.999,
名称:“NSG识别号标记选择”,
},
{
dce:162,
lts:36.157,
名称:“班组标记选择”,
}
]
var getFieldSuffix=函数(rowFieldCount){
开关(rowFieldCount){
案例0:
返回“美元”;
案例1:
返回“单位”;
案例2:
返回“百分比”;
违约:
返回
}
};
var replacementMap={
单_空间:'',
点:“$”,
连字符:'''''',
};
var replacer=函数(str){
返回str.replace(/[.-]/g,l=>{
if(l==“)返回replacementMap[“点”];
if(l==“”)返回replacementMap[“single_space”];
返回replacementMap[“连字符”];
});
};
var arrObj=pools.map(函数(池){
常量obj={};
[‘美元’、‘单位’、‘百分比’].forEach(函数(后缀、索引){
obj[replacer(pool.name)+getFieldSuffix(索引%3)]=''
})
返回Object.assign({
[替换者(池名称)]:obj
})
})
console.log(arrObj)
var池=[{
dce:3,
lts:2,
名称:“nift国家”,
},
{
dce:1049.99,
lts:104.999,
名称:“NSG识别号标记选择”,
},
{
dce:162,
lts:36.157,
名称:“班组标记选择”,
}
]
var getFieldSuffix=函数(rowFieldCount){
开关(rowFieldCount){
案例0:
返回“美元”;
案例1:
返回“单位”;
案例2:
返回“百分比”;
违约:
返回
}
};
var replacementMap={
单_空间:'',
点:“$”,
连字符:'''''',
};
var replacer=函数(str){
返回str.replace(/[.-]/g,l=>{
if(l==“)返回replacementMap[“点”];
if(l==“”)返回replacementMap[“single_space”];
返回replacementMap[“连字符”];
});
};
var arrObj=pools.map(函数(池){
常量obj={};
[‘美元’、‘单位’、‘百分比’].forEach(函数(后缀、索引){
obj[replacer(pool.name)+getFieldSuffix(索引%3)]=''
})
返回Object.assign({
[替换者(池名称)]:obj
})
})
console.log(arrObj)
您可以使用reduce()方法代替map()
像这样:
return Object.assign({
[replacer(pool.name)]: ['Dollars', 'Units', 'Percentage'].reduce(function(acc, suffix, index) {
acc[replacer(pool.name) + getFieldSuffix(index % 3)] = '';
return acc;
}, {})
})
区别在于,使用map时,返回一个数组。使用reduce返回累加器的结果,在本例中,它是一个对象,然后被修补到父对象中
然后可以将其应用于整个变换,如下所示:
var arrObj = pools.reduce(function(acc, pool) {
acc[replacer(pool.name)] = ['Dollars', 'Units', 'Percentage'].reduce(function(acc, suffix, index) {
acc[replacer(pool.name) + getFieldSuffix(index % 3)] = '';
return acc;
}, {});
return acc;
}, {})
可以使用reduce()方法代替map()
像这样:
return Object.assign({
[replacer(pool.name)]: ['Dollars', 'Units', 'Percentage'].reduce(function(acc, suffix, index) {
acc[replacer(pool.name) + getFieldSuffix(index % 3)] = '';
return acc;
}, {})
})
区别在于,使用map时,返回一个数组。使用reduce返回累加器的结果,在本例中,它是一个对象,然后被修补到父对象中
然后可以将其应用于整个变换,如下所示:
var arrObj = pools.reduce(function(acc, pool) {
acc[replacer(pool.name)] = ['Dollars', 'Units', 'Percentage'].reduce(function(acc, suffix, index) {
acc[replacer(pool.name) + getFieldSuffix(index % 3)] = '';
return acc;
}, {});
return acc;
}, {})
好了,你很接近
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 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 arrObj = Object.assign(...pools.map((pool) => {
return {
[replacer(pool.name)]: Object.assign(...['Dollars', 'Units', 'Percentage'].map(function(suffix, index) {
return {
[replacer(pool.name) + getFieldSuffix(index % 3)]: ''
}
}))
}
}))
console.log(arrObj)
好了,你很接近
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 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 arrObj = Object.assign(...pools.map((pool) => {
return {
[replacer(pool.name)]: Object.assign(...['Dollars', 'Units', 'Percentage'].map(function(suffix, index) {
return {
[replacer(pool.name) + getFieldSuffix(index % 3)]: ''
}
}))
}
}))
console.log(arrObj)
最佳(也是显而易见的)解决方案:重构代码,使其返回您想要的内容(其他方法已经提供)
但是,为了获得更通用的解决方案(如果您只得到报告的结果,而没有原始数据),您可以根据您的规范对其进行转换:
const formattedResult = Object.assign.apply(null, arrObj.map(function(o){
let k=Object.keys(o)[0];
return {[k]:Object.assign.apply(null, o[k])};
}));
console.log(formattedResult);
最佳(也是显而易见的)解决方案:重构代码,使其返回您想要的内容(其他方法已经提供)
但是,为了获得更通用的解决方案(如果您只得到报告的结果,而没有原始数据),您可以根据您的规范对其进行转换:
const formattedResult = Object.assign.apply(null, arrObj.map(function(o){
let k=Object.keys(o)[0];
return {[k]:Object.assign.apply(null, o[k])};
}));
console.log(formattedResult);
我把
yourResult
放在变量arrObj
的位置(我刚刚编辑了我的答案以匹配您的代码,所以现在您只需将其粘贴到自己的答案的末尾即可看到结果)。无论如何,正如我所说,正确的解决方案是修改代码,而不是转换错误的结果。我这样做只是为了好玩,并发布了它,因为我认为如果您不能修改原始代码,它可能会很有趣。;-。。。事实上,我原谅了从我的测试材料中删除JSON.stringify()调用(已修复)。对不起,我把yourResult
放在arrObj
变量的位置(我刚刚编辑了我的答案以匹配您的代码,所以现在您只需将其粘贴到您自己的答案的末尾即可查看结果)。无论如何,正如我所说,正确的解决方案是修改代码,而不是转换错误的结果。我这样做只是为了好玩,并发布了它,因为我认为如果您不能修改原始代码,它可能会很有趣。;-。。。事实上,我原谅了从我的测试材料中删除JSON.stringify()调用(已修复)。对不起,我想要一个对象的对象,类似这样的…{code>{“nift_nation”:“{”nift_nationDollars”:““nift_nationUnits”:““nift_nationPercentage”:“},{”NSG_I$NS$\u Mark\u Select”:“{”NSG_I$NS$\u Mark\u SelectUnits”:““NSG_I$NS$\u Mark\u SelectUnits”:“,”NSG_I$NS$\u SelectPercentage”:“,”,