【发布时间】:2020-02-13 15:14:38
【问题描述】:
我已经编辑了原始问题,因为示例没有明确所需的输出,即我没有指定我需要与 Rank 匹配的对象共有的字符串
我正在尝试将一组对象合并为一个对象
每个object 有三组keys,我希望每组只有一个实例,其中Rank 值的编号最小,或者如果Rank 在所有对象上等于'-' .
let objs = [
{
Keyword: 'A keyword',
'First Rank': '-',
'First Title': '-',
'First URL': '-',
'Second Rank': '-',
'Second Title': '-',
'Second URL': '-',
'Third Rank': 1,
'Third Title': 'Title for 1',
'Third URL': 'https://for-one.example.com'
},
{
Keyword: 'A keyword',
'First Rank': '-',
'First Title': '-',
'First URL': '-',
'Second Rank': 2,
'Second Title': 'Title for 2',
'Second URL': 'https://for-two.example.com',
'Third Rank': '-',
'Third Title': '-',
'Third URL': '-'
},
{
Keyword: 'A keyword',
'First Rank': '-',
'First Title': '-',
'First URL': '-',
'Second Rank': '-',
'Second Title': '-',
'Second URL': '-',
'Third Rank': 7,
'Third Title': 'Title for 7',
'Third URL': 'https://for-seven.example.com'
}
]
// I have managed to get the ones with values with this:
const clean = objs.reduce((acc, object) => {
const clone = (({ Keyword, ...obj }) => obj)(object)
if (Object.values(clone).some(val => val !== '-')) {
Object.keys(clone).forEach(key => object[key] === '-' && delete object[key])
acc.push(object)
}
return acc
}, [])
const merged = clean.reduce((result, current) => ({ ...current, ...result }), {})
console.log(merged)
但我正在努力添加一个没有值的,它应该是这样的:
{
'Keyword': 'A keyword',
'First Rank': '-',
'First Title': '-',
'First URL': '-',
'Second Rank': 2,
'Second Title': 'Title for 2',
'Second URL': 'https://for-two.example.com',
'Third Rank': 1,
'Third Title': 'Title for 1',
'Third URL': 'https://for-one.example.com'
}
有什么想法吗?谢谢!
【问题讨论】:
标签: javascript arrays ecmascript-6 javascript-objects