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

JavaScript:如何将JSON对象键值对合并到数组同一索引?

解决键值对合并到数组同一索引的问题

嘿,我来帮你搞定这个问题!先看看你原来代码的问题所在:yaxel.push(key) && yaxel.push(obj[key]) 这段代码里,每次循环会先后执行两次push操作——先把键推入数组,再把对应的值推入数组,所以键和值会被分散到数组的两个不同索引里,这就是结果不符合预期的原因。

要让每组键值对处于数组的同一个索引,你只需要把键和值包装成一个整体(数组或对象)再推入数组就行,下面给你两种实用方案:

方案1:修改原有循环代码

如果你想保留自己写循环的逻辑,只需要调整push的内容,把键和值包装成一个数组再推入:

Object.y = function (obj) {
  var yaxel = [];
  var key;
  for (key in obj) {
    if (obj.hasOwnProperty(key)) {
      // 将键和值包装为一个数组后推入
      yaxel.push([key, obj[key]]);
    }
  }
  return yaxel;
};

var y = Object.y(jsonData["currencies"]);
console.log(y);

执行后你会得到符合预期的结果:

[
  ["AED", "United Arab Emirates Dirham"],
  ["ALL", "Albanian Lek"],
  ["AMD", "Armenian Dram"],
  ["ANG", "Netherlands Antillean Guilder"],
  ["ARS", "Argentine Peso"],
  ["AUD", "Australian Dollar"]
]

方案2:使用ES6原生方法(更简洁)

如果你项目支持ES6及以上语法,直接用原生的Object.entries()方法就能一步到位,它会自动把对象的键值对转换成你想要的数组格式:

var y = Object.entries(jsonData["currencies"]);
console.log(y);

这个方法的输出和方案1完全一致,而且不需要自己写循环,代码更简洁易读。

如果你的需求是每个索引里是一个结构化对象(比如{code: "AED", name: "United Arab Emirates Dirham"}),也可以轻松调整:

// 方案1修改版
yaxel.push({ code: key, name: obj[key] });

// Object.entries配合map实现
var y = Object.entries(jsonData["currencies"]).map(([code, name]) => ({ code, name }));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:02:29