Ras*_*ukh 2 javascript arrays json node.js
我有 JSON:(它有太多行,但粘贴整个 json 太长)
"data": {
"rows": [
{
"row_no": "130",
"sum_begin_period": "3234122.29",
"sum_end_period": "3099063"
},
{
"row_no": "150",
"sum_begin_period": "1252394",
"sum_end_period": "986382"
},
{
"row_no": "160",
"sum_begin_period": "1321400.28",
"sum_end_period": "1321400"
},
{
"row_no": "210",
"sum_begin_period": "3367691.4",
"sum_end_period": "1282444"
},
{
"row_no": "220",
"sum_begin_period": "2320199.07",
"sum_end_period": "265000"
},
{
"row_no": "260",
"sum_begin_period": "1047492.33",
"sum_end_period": "1017444"
},
{
"row_no": "610",
"sum_begin_period": "825495.3",
"sum_end_period": "960385"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要进行一些数学运算,需要来自多行的值。我怎样才能优雅地做到这一点?
到目前为止我已经尝试过:
使用 Array.find():
let ccScore;
for(const row of finance_report){
const satr_390_1 = finance_report.find((row) => row.row_no === "390");
const satr_190_1 = finance_report.find((row) => row.row_no === "190");
const satr_211_1 = finance_report.find((row) => row.row_no === "211");
const satr_600_1 = finance_report.find((row) => row.row_no === "600");
if (satr_600_1== 0) return 1;
ccScore = (satr_390_1 - satr_190_1- satr_211_1) / satr_600_1;
if (ccScore < 0.5) return 1;
else if (ccScore >= 0.5 && ccScore < 2) return 3;
else if (ccScore >= 2) return 5;
}
Run Code Online (Sandbox Code Playgroud)
上述的缺点是 Array.find 重复次数太多。
with Array.maps():(在 .map() 回调中使用 IF 语句进行搜索)
let accounting_factor;
accounting_report.map((row) => {
let summ = 0;
if (row.row_no === "480") summ += parseInt(row.sum_end_period);
if (row.row_no === "490") summ += parseInt(row.sum_end_period);
if (row.row_no === "130") {
accounting_factor =
parseInt(row.sum_end_period) > parseInt(summ) ? false : true;
}
});
Run Code Online (Sandbox Code Playgroud)
上述的缺点是如果重复。
是否有一种更优雅的方法,它不会强迫我重复我的代码,并使我能够使用某些 rows.row_no 提取对象(从“行”数组中)然后进行操作?
PS如果Array.reduce()可以解决这个问题,我会很感激一个例子
小智 5
重组数据如下
let rows = {}
original.data.rows.forEach(row => rows[row.row_no] = row)
// USAGE
rows[ROW_NUM].sum_end_period
Run Code Online (Sandbox Code Playgroud)
您可以尝试一下,我相信它会更快,因为键值元组是索引对象,并且程序不必迭代数组中的每个元素。
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |