let idsList: any = selectIdArr.value.map((item) => { return item.id })代码有什么用
时间: 2024-04-01 20:37:42 浏览: 18
这段代码用于将数组 `selectIdArr` 中的每个对象的 `id` 属性提取出来,形成一个新的数组 `idsList`。具体来说,`Array.map()` 方法会对 `selectIdArr` 数组中的每个元素执行一次回调函数,将回调函数返回的值组成一个新的数组返回。在这里,回调函数是一个箭头函数,它的作用是提取当前元素的 `id` 属性并返回。最终,`idsList` 数组就是由 `selectIdArr` 数组中每个对象的 `id` 属性组成的新数组。
相关问题
优化这段代码:let dataList = async (value) =>{ const res:any = await queryById({ id: value.id }); if(res.status) { parameter.recordData.header = value; parameter.recordData.header.occurrenceTime = dayjs(parameter.recordData.header.occurrenceTime).format('YYYY-MM-DD HH:mm'); let defectSource = defectSourceArr.find(item =>item.id == value.defectSourceId); parameter.recordData.header.stitchingDefectSource = `${defectSource.name}/${value.defectSourceName}`; parameter.recordData.detail = res.data.problemDefectList.map((item)=>{ item.displayScreen = item.displayScreen?item.displayScreen.split(','):[]; item.defectDetailList.defectDetailName = item.defectDetailList.map((item)=>{ return item.defectTypeName+'/'+item.defectDetailName; }); item.defectDetailList.defectDetailName = item.defectDetailList.defectDetailName.join(','); return item; }); getSteps(value.id); }else { parameter.recordData.header = {}; parameter.recordData.detail = []; message.warning('此单据详细数据查询未成功,请检查单据是否存在'); } };
下面是对代码的优化:
```javascript
let dataList = async (value) => {
try {
const res = await queryById({ id: value.id });
if (res.status) {
parameter.recordData.header = {
...value,
occurrenceTime: dayjs(value.occurrenceTime).format('YYYY-MM-DD HH:mm'),
stitchingDefectSource: `${defectSourceArr.find(item => item.id == value.defectSourceId)?.name}/${value.defectSourceName}`
};
parameter.recordData.detail = res.data.problemDefectList.map((item) => {
item.displayScreen = item.displayScreen ? item.displayScreen.split(',') : [];
item.defectDetailList.defectDetailName = item.defectDetailList.map((detail) => {
return `${detail.defectTypeName}/${detail.defectDetailName}`;
}).join(',');
return item;
});
getSteps(value.id);
} else {
parameter.recordData.header = {};
parameter.recordData.detail = [];
message.warning('此单据详细数据查询未成功,请检查单据是否存在');
}
} catch (error) {
console.error(`queryById error: ${error}`);
message.error('获取数据失败,请稍后重试');
}
};
```
优化点如下:
1. 使用 try-catch 语句捕获异常,避免代码抛出错误后程序崩溃。
2. 使用对象解构和展开语法简化代码,避免多次设置对象属性。
3. 使用可选链操作符 `?.` 简化代码,避免因为找不到对象属性而抛出错误。
4. 使用箭头函数和模板字符串简化代码,提高代码可读性和可维护性。
5. 使用 `console.error()` 和 `message.error()` 输出错误信息,便于调试和排查问题。
private async parseMaterial(osgStateSet: any) { let material = new THREE.MeshBasicMaterial({ // side: THREE.DoubleSide, }); //THREE.FrontSide 背面 // THREE.BackSide 前面 // THREE.DoubleSide 双面 let osgImage = osgStateSet.TextureAttributeList[0].value.StateAttribute.Image; // let texture = this.parseImage(osgImage); let fileName = osgImage.Name; const isJPEG = fileName.search(/.jpe?g($|?)/i) > 0; const isPNG = fileName.search(/.png($|?)/i) > 0; if (!isPNG && !isJPEG) { return; } let mimeType = isPNG ? 'image/png' : 'image/jpeg'; let imageUri: any = new Blob([osgImage.Data], { type: mimeType }); let base64 = await this.blobToBase64(imageUri); // debugger let imageUrl: any = URL.createObjectURL(imageUri); try { let texture = new THREE.TextureLoader().load(base64, () => { texture.needsUpdate = true; // texture.format = THREE.RGBAFormat; texture.type = THREE.UnsignedShort5551Type; texture.minFilter = THREE.LinearMipmapNearestFilter; texture.magFilter = THREE.LinearMipmapNearestFilter; texture.generateMipmaps = false; // texture.format = THREE.RGBAIntegerFormat; // texture.minFilter = THREE.NearestFilter; // texture.magFilter = THREE.NearestFilter; // texture.minFilter = THREE.LinearMipMapLinearFilter; // texture.magFilter = THREE.LinearFilter; // texture.wrapS = THREE.RepeatWrapping; // texture.wrapT = THREE.RepeatWrapping; // texture.anisotropy = 1; // texture.generateMipmaps = false; // texture.encoding = THREE.sRGBEncoding; }); imageUri = null; osgImage = null; imageUrl = null; if (texture) { material.map = texture; } } catch (e) { console.log('纹理加载出错', e); } osgStateSet = null; return material; } private blobToBase64(blob: any) { return new Promise((resolve, reject) => { const fileReader = new FileReader(); // readAsDataURL fileReader.readAsDataURL(blob); fileReader.onload = (e: any) => { resolve(e.target.result); }; }); }没有显示base64图片的纹理,也没有报错,请找出问题,并给出详细代码
在代码中,你使用了一个Blob对象来加载纹理图片,并将其转换成了base64编码,但是在加载纹理时,却直接使用了base64编码字符串来加载纹理,这个可能是导致问题的原因。正确的做法应该是使用图片的URL来加载纹理,而不是直接使用base64编码字符串。
具体修改代码如下:
```typescript
private async parseMaterial(osgStateSet: any) {
let material = new THREE.MeshBasicMaterial({
// side: THREE.DoubleSide,
});
//THREE.FrontSide 背面
// THREE.BackSide 前面
// THREE.DoubleSide 双面
let osgImage = osgStateSet.TextureAttributeList[0].value.StateAttribute.Image;
// let texture = this.parseImage(osgImage);
let fileName = osgImage.Name;
const isJPEG = fileName.search(/.jpe?g($|?)/i) > 0;
const isPNG = fileName.search(/.png($|?)/i) > 0;
if (!isPNG && !isJPEG) {
return;
}
let mimeType = isPNG ? 'image/png' : 'image/jpeg';
let imageUri: any = new Blob([osgImage.Data], { type: mimeType });
try {
// 使用图片的URL来加载纹理
let texture = await new Promise<THREE.Texture>((resolve) => {
let imageUrl = URL.createObjectURL(imageUri);
new THREE.TextureLoader().load(imageUrl, (texture) => {
// 在加载完成的回调函数中,手动释放URL对象,避免内存泄漏问题
URL.revokeObjectURL(imageUrl);
texture.needsUpdate = true;
// texture.format = THREE.RGBAFormat;
texture.type = THREE.UnsignedShort5551Type;
texture.minFilter = THREE.LinearMipmapNearestFilter;
texture.magFilter = THREE.LinearMipmapNearestFilter;
texture.generateMipmaps = false;
// texture.format = THREE.RGBAIntegerFormat;
// texture.minFilter = THREE.NearestFilter;
// texture.magFilter = THREE.NearestFilter;
// texture.minFilter = THREE.LinearMipMapLinearFilter;
// texture.magFilter = THREE.LinearFilter;
// texture.wrapS = THREE.RepeatWrapping;
// texture.wrapT = THREE.RepeatWrapping;
// texture.anisotropy = 1;
// texture.generateMipmaps = false;
// texture.encoding = THREE.sRGBEncoding;
resolve(texture);
});
});
if (texture) {
material.map = texture;
}
} catch (e) {
console.log('纹理加载出错', e);
}
osgStateSet = null;
return material;
}
private blobToBase64(blob: any) {
return new Promise((resolve, reject) => {
const fileReader = new FileReader();
// readAsDataURL
fileReader.readAsDataURL(blob);
fileReader.onload = (e: any) => {
resolve(e.target.result);
};
});
}
```
其中,使用了一个Promise对象来等待纹理加载完成后返回,同时在加载完成的回调函数中,手动释放URL对象,避免内存泄漏问题。另外,建议在加载纹理时,设置合适的minFilter和magFilter,以获得更好的渲染效果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![html](https://img-home.csdnimg.cn/images/20210720083451.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)