You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异步函数导入排序对象数组时属性丢失问题排查

问题:筛选排序后的对象导入后属性丢失

问题场景

生成筛选并排序的对象列表时,原文件内打印的数组包含完整对象属性,但导入到另一文件执行聚合操作后,仅diffPercent属性显示正常数值,其他属性显示为空的[Object]。

相关代码

导出的筛选排序函数

export async function V2V2SORT() {
  try {
    const dexdata = await COMPAREV2V2();
    const dexdatafilter = dexdata.filter((item): item is any => (item !== undefined && item.v2a.reserve0 > 10 && item.v2b.reserve1 > 10));
    const dexdatasorted = dexdatafilter.sort((a, b) => {
      return b.diffPercent - a.diffPercent;
    })
    console.log(dexdatasorted)//DEBUG
    return Promise.all(dexdatasorted);
  } catch (error) {
    console.log(error);
  };
}
V2V2SORT()

导入聚合的函数

import { V3V2SORT } from './dexdata/V3V2SORT/V3V2SORT';
import { V2V2SORT } from './dexdata/V3V2SORT/V3V2SORT';
import { V2V3SORT } from './dexdata/V3V2SORT/V3V2SORT';


export async function dexSort() {
    let v3v2 = await V3V2SORT();
    let v2v2 = await V2V2SORT();
    let v2v3 = await V2V3SORT();
    const alldex = [] as any;
    alldex.push(v3v2);
    alldex.push(v2v2);
    alldex.push(v2v3);
    console.log(alldex);
    return alldex;
}
dexSort()

问题原因与修复方案

1. 错误使用Promise.all()

V2V2SORT中返回Promise.all(dexdatasorted)完全多余:dexdatasorted是普通对象数组,不是Promise数组,Promise.all会将每个对象强制包装为已resolve的Promise,这个过程可能破坏对象属性的正常序列化,导致导入后属性丢失。

修复:直接返回排序后的数组
函数本身是async,会自动将返回值包装为Promise,无需额外处理:

export async function V2V2SORT() {
  try {
    const dexdata = await COMPAREV2V2();
    const dexdatafilter = dexdata.filter((item) => 
      item !== undefined && item.v2a.reserve0 > 10 && item.v2b.reserve1 > 10
    );
    const dexdatasorted = dexdatafilter.sort((a, b) => {
      return b.diffPercent - a.diffPercent;
    });
    console.log(dexdatasorted); // DEBUG
    return dexdatasorted; // 直接返回数组
  } catch (error) {
    console.error(error);
    return []; // 错误时返回空数组,避免后续处理异常
  }
}
// 按需执行,不需要自动执行可注释掉V2V2SORT();

2. 导入路径错误

三个排序函数都从同一个文件导入,属于笔误,会导致导入重复函数,数据异常。

修复:修正每个函数的导入路径
确保每个函数来自对应的文件:

import { V3V2SORT } from './dexdata/V3V2SORT/V3V2SORT';
import { V2V2SORT } from './dexdata/V2V2SORT/V2V2SORT'; // 修正路径
import { V2V3SORT } from './dexdata/V2V3SORT/V2V3SORT'; // 修正路径

3. 数组聚合方式导致嵌套

原代码用alldex.push(v3v2)会将每个排序函数返回的数组作为单个元素存入alldex,形成嵌套数组,打印时可能显示异常。

修复:展开数组聚合
使用扩展运算符将所有数组合并为一维数组:

export async function dexSort() {
  const v3v2 = await V3V2SORT();
  const v2v2 = await V2V2SORT();
  const v2v3 = await V2V3SORT();
  const alldex = [...v3v2, ...v2v2, ...v2v3]; // 展开合并
  console.log(alldex);
  return alldex;
}
// 按需执行,不需要自动执行可注释掉dexSort();

内容的提问来源于stack exchange,提问作者the_prophecy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:05:22