处理从五个不同数据库中获取查询的数据转换项目,并将它们合并在一起。 (有两个记录集彼此非常相似,另外两个记录集彼此相似。)
五个回复记录中有三个没问题。其他两个(相似的)奇怪地将某些字段作为数组而不是单个值返回。
即:
dbRecords = [
{
FirstName: ['john', 'john doe']
}
]
这肯定是由于数据维护不佳,但我想将这些转换为单个值,我想我可以这样做。
dbRecords.forEach((item, index, arr) => {
Object.keys(item).forEach(i => {
if(i instanceof Array){
item = item[0];
}
}
});
那可以解决这个问题吗?
答案 0 :(得分:1)
那可以解决这个问题吗?
不,原因item
是对象而不是您想要更改的值,您必须这样做:
item[i] = item[i][0];
另外,i
始终是string
,而且Array
检查必须是 if(item[i] instanceof Array){
:
i
然后你必须将它存回数据库。
PS:key
是一个糟糕的变量名称,为什么不采用{{1}}或类似的东西?
答案 1 :(得分:0)
"五个返回的记录中有三个没问题。其他两个(相似的)奇怪地将某些字段作为数组而不是单个值返回。"
从这个陈述中,听起来你确切地知道哪两个字段是意外的数组。在这种情况下,你不应该使用循环,而是直接定位这些字段。
假设字段为FirstName
和LastName
,您可以这样做:
dbRecords = dbRecords.map(({FirstName:[FirstName], LastName:[LastName], ...rest}) =>
({FirstName, LastName, ...rest})
);
这利用了参数解构和" rest sytnax"在对象文字中,将第一个数组成员提取您感兴趣的两个字段,以及将其余字段提取到一个单独的对象中,然后返回一个新对象,其中包含提取的值以及其余字段。
这是一个有效的例子:
let dbRecords = [{
FirstName: ['john', 'john doe'],
LastName: ['doe', 'john doe'],
OtherField: "foobar"
}, {
FirstName: ['bob', 'bob smith'],
LastName: ['smith', 'bob smith'],
OtherField: "raboof"
}];
dbRecords = dbRecords.map(({FirstName:[FirstName], LastName:[LastName], ...rest}) =>
({FirstName, LastName, ...rest})
);
console.log(dbRecords);