Javascript 从对象数组中的字符串中查找数值并进行计算
我的JavaScript数组如下所示Javascript 从对象数组中的字符串中查找数值并进行计算,javascript,reactjs,Javascript,Reactjs,我的JavaScript数组如下所示 [ {id:1, msg:"Your Acct 123XXXX456 Has Been Debited with USD2,100.00 On 05- MAY- 2019 07:26:58 By AB: 123456**7899/USER NAME/0505201. Bal: USD973.28CR"}, <br/> {id:1, msg: "Your Acct 123XXXX456 Has Been Debited with USD1,1
[
{id:1, msg:"Your Acct 123XXXX456 Has Been Debited with USD2,100.00 On 05-
MAY- 2019 07:26:58 By AB: 123456**7899/USER NAME/0505201. Bal:
USD973.28CR"}, <br/>
{id:1, msg: "Your Acct 123XXXX456 Has Been Debited with USD1,100.00 On
05-MAY-2019 07:26:58 By AB: 123456**7899/USER NAME/0505201. Bal:
USD673.28CR"},<br/>
{id:2, msg: "Your Acct 345XXXX678 Has Been Debited with USD4,100.00 On
05-MAY-2019 07:26:58 By AB: 11111**22222/USER NAME/0505201. Bal:
USD373.28CR"}
]
[123,456,2,1,00,5]
我尝试了以下方法从字符串中获取非数字
let result = myArr[0].replace(/\D+/g, ' ').trim().split(' ').map(e =>
parseInt(e));
但产出是这样的
[
{id:1, msg:"Your Acct 123XXXX456 Has Been Debited with USD2,100.00 On 05-
MAY- 2019 07:26:58 By AB: 123456**7899/USER NAME/0505201. Bal:
USD973.28CR"}, <br/>
{id:1, msg: "Your Acct 123XXXX456 Has Been Debited with USD1,100.00 On
05-MAY-2019 07:26:58 By AB: 123456**7899/USER NAME/0505201. Bal:
USD673.28CR"},<br/>
{id:2, msg: "Your Acct 345XXXX678 Has Been Debited with USD4,100.00 On
05-MAY-2019 07:26:58 By AB: 11111**22222/USER NAME/0505201. Bal:
USD373.28CR"}
]
[123,456,2,1,00,5]
这种方法是将逗号放在每个数字的前面,删除前面带有00的小数点。我不知道如何只选择借方金额。
我希望输出如下:
User Highest Debit Lowest Debit Total Debit
1 2,100.00 1,100.00 3,200.00
2 4,100.00 4,100.00 4,100.00
myArr=[{
“id”:1,
“msg”:“您的账户123xx456已于2019年5月5日07:26:58由AB:123456**7899/用户名/0505201借记2100.00美元。余额:973.28 CR”
},
{
“id”:1,
“msg”:“您的账户123xx456已于2019年5月5日07:26:58由AB:123456**7899/用户名/0505201借记1100.00美元。余额:673.28 CR”
},
{
“id”:2,
“msg”:“您的账户345xx678已于2019年5月5日07:26:58由AB:11111**2222/用户名/0505201借记4100.00美元。余额:373.28 CR”
}
]
让result=myArr[0]。替换(/\D+/g',).trim().split('').map(e=>
parseInt(e));
console.log(result)
您的正则表达式太简单了
这里有一种方法可以使用Math.min和Math.max获取每个借记
我曾考虑使用reduce,但这更具可读性
myArr=[
{“id”:1,“msg”:“您的账户123xx456已于2019年5月5日07:26:58被AB:123456**7899/用户名/0505201.余额:973.28美元记入借方”,
{“id”:1,“msg”:“您的账户123xx456已于2019年5月5日07:26:58被AB:123456**7899/用户名/0505201.余额:673.28美元记入借方”,
{“id”:2,“msg”:“您的账户345xx678已于2019年5月5日07:26:58被AB:11111**2222/用户名/0505201.余额:373.28美元记入借方”}
]
设res={}
myArr.forEach(对象=>{
const id=对象id;
const msg=obj.msg;
const uPos=msg.indexOf(“USD”);//假设为静态消息
//获取金额,移除千位分隔符后使用+转换为数字
常量num=+msg.substring(uPos+3,msg.indexOf(“,uPos)).replace(/,/g,”)
设cur=res[id];
如果(!cur){res[id]={};cur=res[id];cur.total=0;}
cur.low=cur.low?Math.min(cur.low,num):num;
cur.high=cur.high?Math.max(cur.high,num):num;
cur.total+=num;
})
控制台日志(res)代码>我给你做了一个片段myArr[0]
是一个对象。您需要使用myArr[0].msg.replace
谢谢您的帮助。这是否也支持小数点?比如,如果借方金额是2100.50,那么它已经是了。请参阅更新。+
转换为数字,并在过程中删除.00,但不是.05,例如nice。非常感谢你的时间和帮助。