现在我知道有一些类似this question和this question的问题,但都没有回答我的问题。
好吧...
说我有一个api调用,我得到了这样的响应
[
{
amount: 23,
bill: 47,
otherData: null,
title: 'cool title'
},
{
amount: 223,
bill: 427,
otherData: null,
title: 'cooler title'
},
{
amount: 2313,
bill: 437,
otherData: null,
title: 'super cool title'
},
{
amount: 123,
bill: 147,
otherData: null,
title: 'coolest title'
}
]
有没有一种方法可以从此数组创建一个新对象,并可以使用该对象中的属性创建自定义键名?所以所需的输出是..
{
coolTitle: {
amount: 23,
bill: 47,
otherData: null,
title: 'cool title'
},
coolerTitle: {
amount: 223,
bill: 427,
otherData: null,
title: 'cooler title'
},
superCoolTitle: {
amount: 2313,
bill: 437,
otherData: null,
title: 'super cool title'
},
coolestTitle: {
amount: 123,
bill: 147,
otherData: null,
title: 'coolest title'
}
}
现在我知道我可以将对象数组转换成这样的对象。
var result = {};
for (var i=0; i<array.length; i++) {
result[array[i].key] = array[i].value;
}
但是我不知道如何从每个对象中获取标题,驼峰式命名,然后创建自定义键和对象
我什至不确定是否可以进行类似的操作
谢谢
答案 0 :(得分:1)
要获取属性名称,请提取title
并将其空格字符替换为大写字符。然后,就像reduce
插入对象一样简单:
const input=[{amount:23,bill:47,otherData:null,title:'cool title'},{amount:223,bill:427,otherData:null,title:'cooler title'},{amount:2313,bill:437,otherData:null,title:'super cool title'},{amount:123,bill:147,otherData:null,title:'coolest title'}]
console.log(
input.reduce((a, item) => {
const { title } = item;
const camel = title.replace(/ ./g, chars => chars[1].toUpperCase());
a[camel] = item;
return a;
}, {})
);
答案 1 :(得分:0)
使用map
和reduce
,reduce方法将返回带有自定义键的新对象。在reduce方法内部使用map
。这将创建一个title
值的数组,例如['cool','title']
。在相同的map方法内,创建一个字符串以
将单词的第一个字符转换为upperCase,然后将join
转换为所有单词
let oldArr = [{
amount: 23,
bill: 47,
otherData: null,
title: 'cool title'
},
{
amount: 223,
bill: 427,
otherData: null,
title: 'cooler title'
},
{
amount: 2313,
bill: 437,
otherData: null,
title: 'super cool title'
},
{
amount: 123,
bill: 147,
otherData: null,
title: 'coolest title'
}
]
let newArray = oldArr.reduce(function(acc, curr) {
let crtTitle = curr.title.split(' ').map(function(item, index) {
if (index !== 0) {
return item.substring(0, 1).toUpperCase() + item.substring(1, item.length);
} else {
return item;
}
}).join('');
acc[crtTitle] = curr;
return acc
}, {});
console.log(newArray)