Вы можете разделить текст на _
и использовать первое значение в качестве ключа и рассчитать длину для каждого ключа
let array = [{text: "ABC",someobj: {},length: 3}, {text: "XYZ",someobj: {},length: 4}, {text: "TES",someobj: {},length: 2}, {text: "ABC_VALUE",someobj: {},length: 3}, {text: "TES_VALUE",someobj: {},length: 10}, {text: "SME",someobj: {},length: 39}, {text: "SME_VALUE",someobj: {},length: 1}]
let final = array.reduce((op, inp) => {
let text = inp.text.split('_', 1)[0]
op[text] = op[text] || 0
op[text] += inp.length
return op
}, {})
console.log(final)
Или, если вы уверены, что text
отличается только на _value
в конце, вы можете заменить эту часть и использовать в качестве ключа
let array = [{text: "ABC",someobj: {},length: 3}, {text: "XYZ",someobj: {},length: 4}, {text: "TES",someobj: {},length: 2}, {text: "ABC_VALUE",someobj: {},length: 3}, {text: "TES_VALUE",someobj: {},length: 10}, {text: "SME",someobj: {},length: 39}, {text: "SME_VALUE",someobj: {},length: 1}]
let final = array.reduce((op, inp) => {
let text = inp.text.replace(/_value$/gi,'')
op[text] = op[text] || 0
op[text] += inp.length
return op
}, {})
console.log(final)