Я отредактировал исходный вопрос, так как пример не дал желаемого результата, а именно я не указал, что мне нужны строки, общие с объектом, который соответствует Rank
Я пытаюсь объединить массив объектов в один объект
Есть три набора keys
на object
, я хотел бы иметь только один экземпляр каждого набора с самым низким число для значения 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'
}
Есть идеи? Спасибо!