我有一个带有文本名的对象数组
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
}
]如您所见,我在一些文本名称中使用了_VALUE。我试图得到所有匹配值的总长度,即"ABC“的长度+”ABC_VALUE“的长度(6),类似的"SME_VALUE”的长度+ "SME“的长度(40)。
我尝试了切换大小写和if条件。
function getVlaues(obj)
let length=0;
else if(obj.text.includes("SME")) {length += obj.length;}
else if (obj.text.includes("ABC")) {length += obj.length;}
else if (obj.text.includes("TES")) {length += obj.length;}
return length;
}但这并没有返回2对象的总长度。你知道怎么做吗?
发布于 2019-10-18 09:58:24
您可以在_上拆分文本,并使用第一个值作为键并计算每个键的长度
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)
https://stackoverflow.com/questions/58442909
复制相似问题