【问题标题】:combining multiple arrays into an object with first array items as the key将多个数组组合成一个对象,其中第一个数组项作为键
【发布时间】:2014-10-01 06:41:31
【问题描述】:

我有以下这些数组

var category = ['Guitar', 'Bass', 'Amps'];


var platform_a = ['platform-a1','platform-a2','platform-a3'];
var platform_b = ['platform-b1','platform-b2','platform-b3'];
var platform_c = ['platform-c1','platform-c2','platform-c3'];

我想将它们转换成一个看起来像这样的 json

{
    "Guitar":["platform-a1","platform-a2","platform-a3"],
    "Bass":["platform-b1","platform-b2","platform-b3"],
    "Amp":["platform-c1","platform-c2","platform-c3"]
}

我该怎么做?我必须用纯 javascript 来做这个

【问题讨论】:

  • 你知道类别数和平台数吗?你会把平台作为一个数组还是像这样的变量?
  • 我知道类别的数量..所以每个类别可能有不同数量的平台..所以可以说 Gitar mght 有 15 bass 有 10 和 Amp 有 4..但没有..我不能说他们将是一个静态数字
  • 我的问题是..如果这在你的代码库中是硬编码的..因为如果不是你需要去reduce这些家伙;P
  • 所以 T.J 的回答最适合你。

标签: javascript arrays json


【解决方案1】:

让我们针对您的案例提出三种不同的方法:

第一个

如果您只想用您的数据创建 json 对象,请尝试:

http://jsfiddle.net/csdtesting/tap2xom9/

var platform_a = ['platform-a1', 'platform-a2', 'platform-a3'];
var platform_b = ['platform-b1', 'platform-b2', 'platform-b3'];
var platform_c = ['platform-c1', 'platform-c2', 'platform-c3'];
var category = ['Guitar', 'Bass', 'Amps'];

var obj = {
  Guitar: platform_a,
  Bass: platform_b,
  Amps: platform_c
};
document.write(JSON.stringify(obj));

第二

如果您想动态创建它,请执行以下操作:

http://jsfiddle.net/csdtesting/tap2xom9/

var category = ['Guitar', 'Bass', 'Amps'];
var platform_a = ['platform-a1', 'platform-a2', 'platform-a3'];
var platform_b = ['platform-b1', 'platform-b2', 'platform-b3'];
var platform_c = ['platform-c1', 'platform-c2', 'platform-c3'];

var FinalObject = {};

FinalObject[category[0]] = platform_a;
FinalObject[category[1]] = platform_b;
FinalObject[category[2]] = platform_c;

document.write(JSON.stringify(FinalObject));

终于

如果你想更有活力,那么试试这个:

http://jsfiddle.net/csdtesting/kqwz72os/

var FinalObject = {};

var category = ['Guitar', 'Bass', 'Amps'];
var platforms = {
  platform_a: ['platform-a1', 'platform-a2', 'platform-a3'],
  platform_b: ['platform-b1', 'platform-b2', 'platform-b3'],
  platform_c: ['platform-c1', 'platform-c2', 'platform-c3']
};
for (var i = 0; i < category.length; i++) {
  FinalObject[category[i]] = platforms[Object.keys(platforms)[i]];
}

document.write(JSON.stringify(FinalObject));

希望这会有所帮助!

【讨论】:

  • 这完全适用于几个原因...1:我不必像 Tj 那样对值进行硬编码..2:它是可扩展的,因为类别数组可以增长,因此平台的数量...所以基本上它是非常动态的..感谢方向..真的很欣赏它
【解决方案2】:

这里没有合理的捷径。您只需手动完成:

var jsonString = JSON.stringify({
    "Guitar": platform_a,
    "Base": platform_b,
    "Amp": platform_c
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2018-02-20
    • 2022-01-04
    • 2019-05-28
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多