【问题标题】:Create JSON Object from two arrays从两个数组创建 JSON 对象
【发布时间】:2016-08-29 12:21:39
【问题描述】:

我想使用 JavaScript 或 jQuery 从两个数组中创建一个 Json 对象。数据库中保存的数据格式如下:

clob_field_1: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 等等...

clob_field_2:8106.23、7856.49、8009.15、8121.78、8082.8、8294.43、 8137.9、8265.81、8319.5、8186.43等...

理想情况下,结果应如下所示:

[{"Item:" 1, "Value:" 8106.23}, {"Item:" 2, "Value:" 7856.49}, {"Item:" 3, "Value:" 8009.15}, {"Item: " 4, "值:" 8121.78}, etc etc ...]

所以我所做的是,我使用 PL/SQL 从数据库中获取了 clob 文件,因此我可以从 JavaScript 访问它。之后,我声明了 2 个变量并设置了对象,并希望遍历数据以创建一对漂亮的数据。到目前为止,这是我的 JavaScript 代码:

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var b = [8106.23, 7856.49, 8009.15, 8121.78, 8082.8, 8294.43, 8137.9,    8265.81, 8319.5, 8186.43];
  var obj = {};
for (var i = 0; i < a.length; i++) {
  obj['Item:' + a[i]] = 'Value:' + b[i] + '}';
}
alert(JSON.stringify(obj));

但结果很糟糕,看起来如下:

{"Item:1":"Value:8106.23}","Item:2":"Value:7856.49}","Item:3":"Value:8009.15}","Item:4":"Value:8121.78}","Item:5":"Value:8082.8}","Item:6":"Value:8294.43}","Item:7":"Value:8137.9}","Item:8":"Value:8265.81}","Item:9":"Value:8319.5}","Item:10":"Value:8186.43}"}

左大括号从第 2 对开始丢失,冒号而不是逗号,语音标记在错误的位置等等......我相信我的代码中有语法错误,我无法弄清楚它是什么。任何帮助表示赞赏,在此先感谢!

【问题讨论】:

  • [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 你为什么想要这样的东西?为什么不简单地var a = 10;
  • 在你的代码中你只有结束 + '}' 为什么?我的意思是你为什么要使用它?
  • 你的预期输出是什么?
  • 你想要一个输出数组,而你只是初始化了一个对象,并且该对象被全局初始化为循环,这不是一个正确的问题
  • 重要的是你意识到你应该只关心构建列表+对象。您没有理由尝试将大括号甚至冒号注入到对象中。

标签: javascript jquery json


【解决方案1】:

通过map 和 ES6 语法的紧凑方式:

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var b = [8106.23, 7856.49, 8009.15, 8121.78, 8082.8, 8294.43, 8137.9, 8265.81, 
         8319.5, 8186.43];
var obj = a.map( (item, i) => ({ item, value: b[i] }) );
console.log(obj);

注意:我建议不要将属性名称的第一个字母大写。通常只对构造函数执行此操作。

【讨论】:

  • 你可以使用var obj = a.map((item, i) =&gt; ({ item, value: b[i] }));使其更紧凑
  • 谢谢@NinaScholz,你是对的。注意:我看到我们经常关注相同的问题 :) 我喜欢你的贡献!
  • 我保留资本的原因是,我要使用这些数据创建图表,并且必须保留资本。但是感谢您的cmets,将来会记住它。谢谢!
【解决方案2】:

为您的输出创建一个数组并将新对象推入其中,而不是将它们全部设置在一个对象中。

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var b = [8106.23, 7856.49, 8009.15, 8121.78, 8082.8, 8294.43, 8137.9,    8265.81, 8319.5, 8186.43];
var output = [];
for (var i = 0; i < a.length; i++) {
    output.push({'Item': a[i], 'Value': b[i]});
}
alert(JSON.stringify(output));

【讨论】:

  • 作为一个魅力!谢谢!
  • 感谢你们所有人,我会将“Kaivosukeltaja”答案标记为正确,因为它最适合我的要求。但是,再次感谢你们所有人,非常感谢你们的帮助!感谢您指出我的代码有什么问题!
【解决方案3】:

你可以试试:

var obj = [];
for (var i = 0; i < a.length; i++) {
  obj.push({
     Item: a[i],
     Value: b[i]
  });
}

【讨论】:

  • 谢谢,您的代码也能正常工作!感谢您的帮助!
【解决方案4】:
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var b = [8106.23, 7856.49, 8009.15, 8121.78, 8082.8, 8294.43, 8137.9,    8265.81, 8319.5, 8186.43];

  var objArra = [];
for (var i = 0; i < a.length; i++) {
   var obj = {};

  obj['Item:'] = a[i];
  obj['value:'] = b[i];
  objArra.push(obj)
}
alert(JSON.stringify(objArra));

Fiddle Check

【讨论】:

  • 谢谢,这也有效,但我将“Kaivosukeltaja”的答案标记为正确,因为它最适合我的要求。无论如何感谢您的帮助,这也很有帮助!
【解决方案5】:

如果你认为你的输入是正确的,你也可以试试这个

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var b = [8106.23, 7856.49, 8009.15, 8121.78, 8082.8, 8294.43, 8137.9,    8265.81, 8319.5, 8186.43];
let sum = a.map((val, index) => {
    return {'Item':val, 'Value': b[index]};
})

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 2021-12-24
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多