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

Node.js遍历Azure Artefact响应数组提取指定字段值

遍历Azure Artefact响应数据提取指定字段的解决方法

问题背景

你通过Axios从Azure Artefact feeds获取到如下格式的响应数据,需要提取每个项的normalizedName和对应的normalizedVersion:

{
  "value": [
    {
      "normalizedName": "@test",
      "name": "@test",
      "versions": [
        {
          "normalizedVersion": "1.2.6",
          "version": "1.2.6",
        }
      ],
    },
    {
      "normalizedName": "@test2",
      "name": "@test2",
      "versions": [
        {
          "normalizedVersion": "4.0.1",
          "version": "4.0.1",
        }
      ],
    },
    {
      "normalizedName": "@test3",
      "name": "@test3",
      "versions": [
        {
          "normalizedVersion": "2.2.0",
          "version": "2.2.0",
        }
      ],
    },
  ]
}

期望输出格式:

[ '@test','1.2.6' ]
[ '@test2','4.0.1' ]
[ '@test3','2.2.0' ]

但你当前的代码仅能提取第一个项的字段值:

for (var key in response.data.value[0]) {
  if (key === 'normalizedName') {
    verList.push(response.data.value[0][key]);
  }
}
for (var key in response.data.value[0].versions[0]) {
  if (key === 'normalizedVersion') {
    verList.push(response.data.value[0].versions[0][key]);
  }
}

当前输出:

[ '@test', '1.2.6' ]

解决思路与代码

你的代码问题在于只操作了response.data.value数组的第一个元素(索引0),没有遍历整个数组。以下是几种可行的实现方式:

方式1:使用map方法(最简洁)

map方法可以直接遍历数组并返回处理后的新数组,非常适合这种场景:

// 提取所有项的normalizedName和对应normalizedVersion
const verList = response.data.value.map(item => {
  // 每个item的versions数组只有一个元素,直接取索引0
  return [item.normalizedName, item.versions[0].normalizedVersion];
});

// 按期望格式输出
verList.forEach(item => console.log(item));

方式2:使用forEach遍历

如果更习惯显式的遍历逻辑,可以用forEach:

const verList = [];
// 遍历value数组中的每一个包项
response.data.value.forEach(item => {
  // 提取当前项的目标字段,组成数组存入verList
  verList.push([item.normalizedName, item.versions[0].normalizedVersion]);
});

// 打印结果
verList.forEach(arr => console.log(arr));

方式3:传统for循环

如果你偏好传统的for循环写法:

const verList = [];
const items = response.data.value;
// 遍历整个value数组
for (let i = 0; i < items.length; i++) {
  const currentItem = items[i];
  verList.push([
    currentItem.normalizedName,
    currentItem.versions[0].normalizedVersion
  ]);
}

// 输出结果
for (let i = 0; i < verList.length; i++) {
  console.log(verList[i]);
}

以上三种方式都能遍历所有项,得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:15:13