Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React componentDidUpdate中添加和组合数据_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 在React componentDidUpdate中添加和组合数据

Javascript 在React componentDidUpdate中添加和组合数据,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我有一个功能组件,它以以下格式编译对象中的数据(this.state.scanlist): 0: brand: "AATEST" exp: "2022-08-25" gtin: "15735423000247" iname: "Arthur's Test Item" lot: "EEEFFF" qty: 5 ref: "TESTREFE" 1: brand: "AA

我有一个功能组件,它以以下格式编译对象中的数据(this.state.scanlist):

0:
brand: "AATEST"
exp: "2022-08-25"
gtin: "15735423000247"
iname: "Arthur's Test Item"
lot: "EEEFFF"
qty: 5
ref: "TESTREFE"

1:
brand: "AATEST"
exp: "2022-08-25"
gtin: "15735423000247"
iname: "Arthur's Test Item"
lot: "CCCDDD"
qty: 3
ref: "TESTREFE"

2:
brand: "AATEST"
exp: "2022-08-25"
gtin: "15735423000247"
iname: "Arthur's Test Item"
lot: "CCCDDD"
qty: 2
ref: "OTHERTESTREF"
我希望在每次组件更新时都有一个具有以下预期输出的新对象:

0:
ref: "TESTREFE"
qty: 8

1:
ref: "OTHERTESTREF"
qty: 2

此外,如果有一个更实际的方式来做这件事在反应,我会喜欢听到它

您可以使用
Array.reduce
,它与
react
无关:

const obj=[{
品牌:“AATEST”,
实验:“2022-08-25”,
gtin:“1573542300247”,
iname:“亚瑟的测试项目”,
地段:“EEEFFF”,
数量:5,
参考:“TESTREFE”
},
{
品牌:“AATEST”,
实验:“2022-08-25”,
gtin:“1573542300247”,
iname:“亚瑟的测试项目”,
地段:“CCCDDD”,
数量:3,
参考:“TESTREFE”
},
{
品牌:“AATEST”,
实验:“2022-08-25”,
gtin:“1573542300247”,
iname:“亚瑟的测试项目”,
地段:“CCCDDD”,
数量:2,
参考:“其他测试参考”
}
]
常量结果=对象减少((acc,curr)=>{
//检查累加器中是否存在具有当前参考值的对象
常数ndx=acc.findIndex(e=>e.ref==curr.ref)
如果(ndx>-1){
//如果存在,则增加数量
acc[ndx]。数量+=1
}否则{
//如果不存在,则将新对象推送到累加器
加速推({
参考号:curr.ref,
数量:当前数量
})
}
返回acc;
}, []);

console.log(结果)
我相信这可能是正确的!我有类似的东西,但我仍然有不一致的结果(计数)。这可能是我使用状态导致的。谢谢你的意见。很有趣。当我在以下数据上运行时,我得到数量:5。它似乎对第一个列表进行计数,而不是对每个附加列表仅计数一个:[{“brand”:“AATEST”,“ref”:“TESTREFE”,“iname”:“Arthur的测试项目”,“gtin”:“1573542300247”,“exp”:“2022-08-25”,“lot”:“aaabb”,“qty”:3},{“brand”:“AATEST”,“ref”:“TESTREFE”,“iname”:“Arthur的测试项目”,“gtin”:“157342300027”,“exp”:“2022-08-25”,“lot”:“CCCDDD”,“qty”:3},{“品牌”:“AATEST”,“ref”:“TESTREFE”,“iname”:“Arthur's Test Item”,“gtin”:“1573542300247”,“exp”:“2022-08-25”,“批次”:“EEEFFF”,“数量”:3}]