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

合并两个API返回数组筛选指定字段时遇TypeError问题求助

合并数组时的TypeError错误解决

错误原因

你触发的TypeError: Cannot set properties of undefined (setting 'value'),是因为skills是初始为空的ref数组,循环中skills[i]对应的元素不存在(值为undefined),自然无法给它的.value属性赋值。

修正方案

方案一:直接生成新数组赋值(推荐)

通过map方法直接将两个数组合并成目标数组,然后赋值给skills.value,代码更简洁:

const skills = ref([]);
const entries = axios.get(`https://cdn.contentful.com/spaces/${space_id}/environments/${environment_id}/entries?access_token=${access_token}`);
const assets = axios.get(`https://cdn.contentful.com/spaces/${space_id}/environments/${environment_id}/assets?access_token=${access_token}`);
axios
  .all([entries, assets])
  .then(
    axios.spread((...responses) => {
      const responseEntries = responses[0].data.items.map(
        (item) => item.fields
      );
      const responseAssets = responses[1].data.items.map(
        (item) => "https:" + item.fields.file.url
      );
      
      // 新增长度校验,避免数组越界
      if (responseEntries.length !== responseAssets.length) {
        console.warn('entries与assets数量不匹配,合并操作终止');
        return;
      }

      // 直接生成合并后的数组并赋值给ref的value
      skills.value = responseEntries.map((entry, index) => [
        responseAssets[index],
        entry.title,
        entry.list,
        entry.description
      ]);
    })
  )
  .catch((error) => console.log(error));

方案二:使用push方法填充数组

如果习惯用循环,直接往skills.value中push新元素即可,不需要访问不存在的数组项:

const skills = ref([]);
const entries = axios.get(`https://cdn.contentful.com/spaces/${space_id}/environments/${environment_id}/entries?access_token=${access_token}`);
const assets = axios.get(`https://cdn.contentful.com/spaces/${space_id}/environments/${environment_id}/assets?access_token=${access_token}`);
axios
  .all([entries, assets])
  .then(
    axios.spread((...responses) => {
      const responseEntries = responses[0].data.items.map(
        (item) => item.fields
      );
      const responseAssets = responses[1].data.items.map(
        (item) => "https:" + item.fields.file.url
      );
      
      if (responseEntries.length !== responseAssets.length) {
        console.warn('entries与assets数量不匹配,合并操作终止');
        return;
      }

      for (let i = 0; i < responseEntries.length; i++) {
        // 直接向ref的数组中push元素
        skills.value.push([
          responseAssets[i],
          responseEntries[i].title,
          responseEntries[i].list,
          responseEntries[i].description,
        ]);
      }
    })
  )
  .catch((error) => console.log(error));

额外注意

必须保证responseEntries和responseAssets的长度一致,否则会出现数组越界或者部分数据缺失的问题,建议加入长度校验逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:31:52