如何解决通过对象数组迭代本机
我的回复是
{
"payload":{
"count":158,"transactionList":[
{
"_id":2410787,"chnl":"Mobile","crtd_by":30001,"crtd_dt":{
"$date":"2020-10-12T11:26:52.243Z"
},"event_id":"1005","event_name":"1005","interface":{
"deviceInfo":{
"webOrMobile":"web"
},"system":"EI-Platform","event":1005,"src_system_name":"SNOC","undefined":"9842012345"
},"locale":"en","nodeid":20,"org_id":20,"org_type":5,"pwd":"KpR8Vp8SMRWPncdaBwMLwnsWh2E1JfoPnTE1rozmc3s=","rqst":"Request-Type","src":"i","status":152,"status_track":[
{
"status":103,"updtd_dt":{
"$date":"2020-10-12T11:26:52.243Z"
}
},{
"status":152,"updtd_dt":{
"$date":"2020-10-12T11:26:52.452Z"
}
}
],"timezoneOffset":-330,"transaction_id":2410787,"tz":"20201012165651","uid":30001,"uname":"EIADMIN","updtd_by":30001,"updtd_dt":{
"$date":"2020-10-12T11:26:52.452Z"
},"utype":730,"status_name":"Completed","status_key":"status_2","event_description":"Bolt On/Top Up"
},{
"_id":2410786,"chnl":"Web","crtd_dt":{
"$date":"2020-10-10T12:02:32.069Z"
},"event_id":"1004","event_name":"1004","interface":{
"amount":120,"customerName":"David Smith","event":1004,"totalAmount":120,"deviceInfo":{
"webOrMobile":"web"
},"payment_details":{
"cash_mode":{
"status":111,"cash":"120"
}
},"account_no":11241212
},"payment_status":111,"rqst":"Create","updtd_dt":{
"$date":"2020-10-10T12:02:32.069Z"
}
},"updtd_dt":{
"$date":"2020-10-10T12:02:32.319Z"
}
}
],"transaction_id":2410786,"tz":"20201010120230","updtd_dt":{
"$date":"2020-10-10T12:02:32.319Z"
},"utype":1,"event_description":"Bill Payment"
},{
"_id":2410762,"crtd_dt":{
"$date":"2020-09-22T11:15:40.631Z"
},"event_id":"1001","event_name":"1001","interface":{
"pcardno":"8944110000000100017","doc_tran_value":"","p_lname":"Sharma","product_id":"PAYG01","p_fname":"Rakesh","msisdn":"7999990099","zipcode":"9090","state":"50054","lastname":"Sharma","firstname":"Rakesh","country":"50052","title":"50092","icc":"80990","phoneNumber":"9709607195","address":"kormangla","email":"no@no.com","event":1001,"dob":"02-Sep-2002"
},"pending_at":"Head Of Sales","status":103,"status_track":[],"transaction_id":2410762,"tz":"20200922111540","updtd_dt":{
"$date":"2020-09-22T11:15:40.875Z"
},"status_name":"In Progress","status_key":"status_1","event_description":"Prepaid Form"
}
]
}
}
我需要一个包含event_description
和count
的数组,即event_description
来自transactionsList
,而count
是基于{{1}在事务列表中。请检查以下我尝试过的代码,但是没有用。你能帮我吗?
event_description
结果数组应包含对象,每个对象都有两个键,一个是 var transactionList = response.payload.transactionList
var events = []
for (const transaction in transactionList) {
let existedindex = events.findindex(({event}) => event['event_description'] == transaction['event_description'])
if (existedindex && existedindex >= 0) {
events[existedindex]['count'] = events[existedindex]['count'] + 1
} else {
let newEvent = { 'event_description': transaction['event_description'],'count': 1 }
events.push(newEvent);
}
}
,它是count
的出现次数,另一个是event-description
本身。
解决方法
尝试以下代码块
var transactionList = response.payload.transactionList
var events = []
transactionList.forEach((transaction,index)=>{
let existedIndex = events.findIndex((event) => event.event_description === transaction.event_description)
if (existedIndex >= 0) {
events[existedIndex].count = events[existedIndex].count + 1
} else {
let newEvent = { 'event_description': transaction.event_description,'count': 1 }
events.push(newEvent);
}
})
console.log(events)
,
当您需要使用对象时,您正在使用索引。
您需要使用for of
而不是for in
这是更新的代码:
var transactionList = response.payload.transactionList;
var events = [];
for (const transaction of transactionList) {
let existedIndex = events.findIndex(
({ event }) =>
event && // a little test because sometime it returns undifined
event["event_description"] &&
event["event_description"] == transaction["event_description"]
);
if (existedIndex && existedIndex >= 0) {
events[existedIndex]["count"] = events[existedIndex]["count"] + 1;
} else {
let newEvent = {
event_description: transaction["event_description"],count: 1,};
events.push(newEvent);
}
}
这是一个完整的代码段,其中我将JSON更改为一个对象,因此您可以在不使用RN的情况下对其进行测试。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Template</title>
</head>
<body>
<script>
const response = {
payload: {
count: 158,transactionList: [
{
_id: 2410787,chnl: "Mobile",crtd_by: 30001,crtd_dt: {
$date: "2020-10-12T11:26:52.243Z",},event_id: "1005",event_name: "1005",interface: {
deviceInfo: {
webOrMobile: "web",system: "EI-Platform",event: 1005,src_system_name: "SNOC",undefined: "9842012345",locale: "en",nodeid: 20,org_id: 20,org_type: 5,pwd: "KpR8Vp8SMRWPncdaBwMLwnsWh2E1JfoPnTE1rozmc3s=",rqst: "Request-Type",src: "i",status: 152,status_track: [
{
status: 103,updtd_dt: {
$date: "2020-10-12T11:26:52.243Z",{
status: 152,updtd_dt: {
$date: "2020-10-12T11:26:52.452Z",],timezoneOffset: -330,transaction_id: 2410787,tz: "20201012165651",uid: 30001,uname: "EIADMIN",updtd_by: 30001,updtd_dt: {
$date: "2020-10-12T11:26:52.452Z",utype: 730,status_name: "Completed",status_key: "status_2",event_description: "Bolt On/Top Up",{
_id: 2410786,chnl: "Web",crtd_dt: {
$date: "2020-10-10T12:02:32.069Z",event_id: "1004",event_name: "1004",interface: {
amount: 120,customerName: "David Smith",event: 1004,totalAmount: 120,deviceInfo: {
webOrMobile: "web",payment_details: {
cash_mode: {
status: 111,cash: "120",account_no: 11241212,payment_status: 111,rqst: "Create",updtd_dt: {
$date: "2020-10-10T12:02:32.069Z",updtd_dt: {
$date: "2020-10-10T12:02:32.319Z",transaction_id: 2410786,tz: "20201010120230",updtd_dt: {
$date: "2020-10-10T12:02:32.319Z",utype: 1,event_description: "Bill Payment",{
_id: 2410762,crtd_dt: {
$date: "2020-09-22T11:15:40.631Z",event_id: "1001",event_name: "1001",interface: {
pcardno: "8944110000000100017",doc_tran_value: "",p_lname: "Sharma",product_id: "PAYG01",p_fname: "Rakesh",msisdn: "7999990099",zipcode: "9090",state: "50054",lastname: "Sharma",firstname: "Rakesh",country: "50052",title: "50092",icc: "80990",phoneNumber: "9709607195",address: "kormangla",email: "no@no.com",event: 1001,dob: "02-Sep-2002",pending_at: "Head Of Sales",status: 103,status_track: [],transaction_id: 2410762,tz: "20200922111540",updtd_dt: {
$date: "2020-09-22T11:15:40.875Z",status_name: "In Progress",status_key: "status_1",event_description: "Prepaid Form",};
var transactionList = response.payload.transactionList;
var events = [];
for (const transaction of transactionList) {
let existedIndex;
existedIndex = events.findIndex(
({ event }) =>
event &&
event["event_description"] &&
event["event_description"] == transaction["event_description"]
);
if (existedIndex && existedIndex >= 0) {
events[existedIndex]["count"] = events[existedIndex]["count"] + 1;
} else {
let newEvent = {
event_description: transaction["event_description"],};
events.push(newEvent);
}
}
console.log(events);
</script>
</body>
</html>
,
您可以像这样使用数组约简
const data= {
"payload":{
"count":158,"transactionList":[
{
"_id":2410787,"chnl":"Mobile","crtd_by":30001,"crtd_dt":{
"$date":"2020-10-12T11:26:52.243Z"
},"event_id":"1005","event_name":"1005","interface":{
"deviceInfo":{
"webOrMobile":"web"
},"system":"EI-Platform","event":1005,"src_system_name":"SNOC","undefined":"9842012345"
},"locale":"en","nodeid":20,"org_id":20,"org_type":5,"pwd":"KpR8Vp8SMRWPncdaBwMLwnsWh2E1JfoPnTE1rozmc3s=","rqst":"Request-Type","src":"i","status":152,"status_track":[
{
"status":103,"updtd_dt":{
"$date":"2020-10-12T11:26:52.243Z"
}
},{
"status":152,"updtd_dt":{
"$date":"2020-10-12T11:26:52.452Z"
}
}
],"timezoneOffset":-330,"transaction_id":2410787,"tz":"20201012165651","uid":30001,"uname":"EIADMIN","updtd_by":30001,"updtd_dt":{
"$date":"2020-10-12T11:26:52.452Z"
},"utype":730,"status_name":"Completed","status_key":"status_2","event_description":"Bolt On/Top Up"
},{
"_id":2410786,"chnl":"Web","crtd_dt":{
"$date":"2020-10-10T12:02:32.069Z"
},"event_id":"1004","event_name":"1004","interface":{
"amount":120,"customerName":"David Smith","event":1004,"totalAmount":120,"deviceInfo":{
"webOrMobile":"web"
},"payment_details":{
"cash_mode":{
"status":111,"cash":"120"
}
},"account_no":11241212
},"payment_status":111,"rqst":"Create","updtd_dt":{
"$date":"2020-10-10T12:02:32.069Z"
}
},"updtd_dt":{
"$date":"2020-10-10T12:02:32.319Z"
}
}
],"transaction_id":2410786,"tz":"20201010120230","updtd_dt":{
"$date":"2020-10-10T12:02:32.319Z"
},"utype":1,"event_description":"Bill Payment"
},{
"_id":2410762,"crtd_dt":{
"$date":"2020-09-22T11:15:40.631Z"
},"event_id":"1001","event_name":"1001","interface":{
"pcardno":"8944110000000100017","doc_tran_value":"","p_lname":"Sharma","product_id":"PAYG01","p_fname":"Rakesh","msisdn":"7999990099","zipcode":"9090","state":"50054","lastname":"Sharma","firstname":"Rakesh","country":"50052","title":"50092","icc":"80990","phoneNumber":"9709607195","address":"kormangla","email":"no@no.com","event":1001,"dob":"02-Sep-2002"
},"pending_at":"Head Of Sales","status":103,"status_track":[],"transaction_id":2410762,"tz":"20200922111540","updtd_dt":{
"$date":"2020-09-22T11:15:40.875Z"
},"status_name":"In Progress","status_key":"status_1","event_description":"Prepaid Form"
},"event_description":"Prepaid Form"
}
]
}
};
const reducer = (acc,cur) => {
const item = acc.find((x) => x['event_description'] === cur['event_description']);
if (item) {
item.count++;
} else {
acc.push({
event_description: cur.event_description,count:1
});
}
return acc;
};
console.log(data.payload.transactionList.reduce(reducer,[]))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。