this.list.forEach((x)=> { if(this.map.has(x.regionName)){ const value = this.map.get(x.regionName) this.map.set(x.regionName,value,x.finalTotalAmount) }else{ this.map.set(x.regionName,x.finalTotalAmount) }如何求取finalTotalAmount的中位数
时间: 2024-04-17 22:25:55 浏览: 61
要求finalTotalAmount的中位数,你可以按照以下步骤进行操作:
1. 首先,你需要将finalTotalAmount的值提取出来,可以使用map函数将this.list中的每个元素映射为finalTotalAmount的数组。可以使用以下代码:
```javascript
const amounts = this.list.map(x => x.finalTotalAmount);
```
2. 然后,对amounts数组进行排序,可以使用sort函数进行升序排序。
```javascript
amounts.sort((a, b) => a - b);
```
3. 排序后,你可以通过以下方式计算中位数:
- 如果数组长度为奇数,中位数就是排序后的数组中间的值:
```javascript
const median = amounts[Math.floor(amounts.length / 2)];
```
- 如果数组长度为偶数,中位数是排序后的数组中间两个值的平均值:
```javascript
const mid = Math.floor(amounts.length / 2);
const median = (amounts[mid - 1] + amounts[mid]) / 2;
```
这样,你就可以得到finalTotalAmount的中位数了。
相关问题
this.tableDataList.forEach(item => { item.baTransports.forEach(items => { this.materialList.push(items) }); }); 代码优化
这段代码使用了JavaScript的箭头函数和数组方法来遍历嵌套数据结构。它首先通过`.forEach`迭代`tableDataList`中的每个元素,然后进一步迭代每个元素的`baTransports`属性。对于`baTransports`中的每一个`items`,将其添加到`materialList`中。
为了优化这段代码,我们可以考虑以下几个方面:
1. **解构赋值**:如果`items`不需要保留原始引用,可以使用解构赋值简化`push`操作,如`this.materialList.push(...items)`。
2. **避免冗余循环**:如果有条件判断需要过滤或处理某些特定情况,可以在内部循环之前添加,避免不必要的遍历。
3. **性能提升**:如果`tableDataList`非常大,可以考虑利用`Array.prototype.flat()`方法扁平化嵌套数组,然后一次性推入`materialList`。
4. **使用for-of循环**:有时候`for`循环比`forEach`更高效,尤其是在处理索引的情况下,但这里由于涉及到深度遍历,两者差异不大。
优化后的代码可能会像这样:
```javascript
if (someCondition) { // 添加条件判断
this.materialList.push(...tableDataList.flatMap(item => item.baTransports));
}
```
优化这段代码 if ( this.queryParam.tonnageOne == '' || this.queryParam.tonnageTwo == '' || this.queryParam.tonnageThree == '' || this.dataSource.some((item) => !item.feiGangName) || this.dataSource.some((item) => !item.feiGangPrice) || this.dataSourceFeWater.some((item) => !item.tscfhcbName) || this.dataSourceFeWater.some((item) => !item.temp) || this.dataSourceFeWater.some((item) => !item.tscfhcb_C) || this.dataSourceFeWater.some((item) => !item.tscfhcb_Si) || this.dataSourceFeWater.some((item) => !item.tscfhcb_Mn) || this.dataSourceFeWater.some((item) => !item.tscfhcb_P) || this.dataSourceFeWater.some((item) => !item.tscfhcb_S) || this.dataSourceFeWater.some((item) => !item.tscfhcb_Price) ) { this.$message.error('请检查值,或者名称不能为空!!!') } else { this.dataSource.forEach((item) => { item['acoursewareId'] = 3343772731908188 const editableItem = this.editableData[item.id] if (editableItem) { Object.assign(item, editableItem) } }) this.editableData = [] this.dataSourceFeWater.forEach((item) => { item['acoursewareId'] = 3343772731908188 const editableItem = this.editableDataFeWater[item.id] if (editableItem) { Object.assign(item, editableItem) } }) this.editableDataFeWater = [] console.log(this.dataSourceFeWater) // 清空可编辑数据 this.conceal = false this.concealFeWater = false var addZldwInfo = { AcoursewareId: 3343772731908188, tons1: this.queryParam.tonnageOne, tons2: this.queryParam.tonnageTwo, tons3: this.queryParam.tonnageThree, } let param = { addZldwInfo: addZldwInfo, addFgList: this.dataSource, b_TscfhcbListAdd: this.dataSourceFeWater, } FeAdd(param) .then((res) => {}) .catch((error) => {}) }
你可以先将一些重复的代码提取成函数,以减少代码冗余。同时,你可以将这些验证条件提取出来,方便进行管理和修改。下面是一个简单的示例:
```javascript
function validateData(dataSource, dataSourceFeWater, queryParam) {
// 验证条件
const conditions = [
queryParam.tonnageOne === '',
queryParam.tonnageTwo === '',
queryParam.tonnageThree === '',
dataSource.some((item) => !item.feiGangName),
dataSource.some((item) => !item.feiGangPrice),
dataSourceFeWater.some((item) => !item.tscfhcbName),
dataSourceFeWater.some((item) => !item.temp),
dataSourceFeWater.some((item) => !item.tscfhcb_C),
dataSourceFeWater.some((item) => !item.tscfhcb_Si),
dataSourceFeWater.some((item) => !item.tscfhcb_Mn),
dataSourceFeWater.some((item) => !item.tscfhcb_P),
dataSourceFeWater.some((item) => !item.tscfhcb_S),
dataSourceFeWater.some((item) => !item.tscfhcb_Price),
];
if (conditions.some((condition) => condition)) {
// 验证失败
return false;
}
// 验证成功
return true;
}
function updateData(dataSource, editableData) {
dataSource.forEach((item) => {
item['acoursewareId'] = 3343772731908188;
const editableItem = editableData[item.id];
if (editableItem) {
Object.assign(item, editableItem);
}
});
editableData = [];
}
// 在原来的代码中调用新的函数
if (validateData(this.dataSource, this.dataSourceFeWater, this.queryParam)) {
updateData(this.dataSource, this.editableData);
updateData(this.dataSourceFeWater, this.editableDataFeWater);
console.log(this.dataSourceFeWater);
// 清空可编辑数据
this.conceal = false;
this.concealFeWater = false;
var addZldwInfo = {
AcoursewareId: 3343772731908188,
tons1: this.queryParam.tonnageOne,
tons2: this.queryParam.tonnageTwo,
tons3: this.queryParam.tonnageThree,
};
let param = {
addZldwInfo: addZldwInfo,
addFgList: this.dataSource,
b_TscfhcbListAdd: this.dataSourceFeWater,
};
FeAdd(param)
.then((res) => {})
.catch((error) => {});
} else {
this.$message.error('请检查值,或者名称不能为空!!!');
}
```
上面的代码,我们将验证条件和更新数据的操作分别提取成了两个函数:`validateData` 和 `updateData`。这样可以让代码更加清晰和易于维护。
阅读全文