【问题标题】:Combine two arrays into an object in JSON在 JSON 中将两个数组组合成一个对象
【发布时间】:2014-08-18 20:53:11
【问题描述】:
column_names: [
    "School Year Ending",
    "Total Students",
    "American Indian/Alaskan Native: Total",
    "American Indian/Alaskan Native: Male",
    "American Indian/Alaskan Native: Female",
    "Asian/Pacific Islander: Total",
    "Asian/Pacific Islander: Male",
    "Asian/Pacific Islander: Female",
    "Hispanic: Total",
    "Hispanic: Male",
    "Hispanic: Female",
    "Black: Total",
    "Black: Male",
    "Black: Female",
    "White: Total",
    "White: Male",
    "White: Female"
],
data: [
    "2011-12-31",
    3471888,
    39433,
    19926,
    19507,
    182697,
    94104,
    88593,
    686081,
    344910,
    341171,
    536271,
    260720,
    275551,
    1970983,
    1006592,
    964391
]

有没有办法将这两个 JSON 数组转换为对象格式?例如:

"School Year Ending": "2011-12-31",
"Total Students": 3721888,
...

为了方便起见,我更喜欢使用 lo-dash 函数。有这样的吗?

【问题讨论】:

  • 请注意,您的示例不是 JSON。它看起来像一个 JS 数组/对象。我相信你的问题根本与 JSON 无关。
  • 它确实是 Felix,我只是复制了部分 JSON 返回以显示在这里。这个结构很长一段时间都与问题无关,所以我拿了一个样本。
  • 数据来自哪里并不重要。看起来您想将两个 JS 数组组合成一个 JS 对象。例如,您选择的答案也与 JSON 无关。

标签: javascript arrays json object lodash


【解决方案1】:
_.zipObject(column_names, data);

应该这样做。

【讨论】:

  • 所有其他答案都有效,但这个答案是我要求的。
【解决方案2】:

使用原生 JavaScript - Fiddle

var column_names = [
    "School Year Ending",
    "Total Students",
    "American Indian/Alaskan Native: Total",
    "American Indian/Alaskan Native: Male",
    "American Indian/Alaskan Native: Female",
    "Asian/Pacific Islander: Total",
    "Asian/Pacific Islander: Male",
    "Asian/Pacific Islander: Female",
    "Hispanic: Total",
    "Hispanic: Male",
    "Hispanic: Female",
    "Black: Total",
    "Black: Male",
    "Black: Female",
    "White: Total",
    "White: Male",
    "White: Female"
],
data = [
    "2011-12-31",
    3471888,
    39433,
    19926,
    19507,
    182697,
    94104,
    88593,
    686081,
    344910,
    341171,
    536271,
    260720,
    275551,
    1970983,
    1006592,
    964391
],
obj = {};

for (var i = 0, l = column_names.length; i < l; i += 1) {
    obj[column_names[i]] = data[i]
}
console.log(obj);

【讨论】:

    【解决方案3】:

    是的。我相信这会在纯 JS 中完成。

    var columns = { };
    for (var i in column_names) 
        columns[column_names[i]] = data[i];
    

    JSFiddle

    【讨论】:

      【解决方案4】:

      还有另一个使用 vanilla JS 的解决方案!这使用 forEach

      http://jsfiddle.net/w5f36jwd/

      school_data = {
          column_names:
          [
              "School Year Ending",
              "Total Students",
              "American Indian/Alaskan Native: Total",
              "American Indian/Alaskan Native: Male",
              "American Indian/Alaskan Native: Female",
              "Asian/Pacific Islander: Total",
              "Asian/Pacific Islander: Male",
              "Asian/Pacific Islander: Female",
              "Hispanic: Total",
              "Hispanic: Male",
              "Hispanic: Female",
              "Black: Total",
              "Black: Male",
              "Black: Female",
              "White: Total",
              "White: Male",
              "White: Female"
          ],
          data:
          [
              "2011-12-31",
              3471888,
              39433,
              19926,
              19507,
              182697,
              94104,
              88593,
              686081,
              344910,
              341171,
              536271,
              260720,
              275551,
              1970983,
              1006592,
              964391
          ]
      }
      
      var new_object = {};
      
      school_data.column_names.forEach(function(el, index, data_array){
          new_object[el] = school_data.data[index];
      });
      
      console.log(new_object);
      

      【讨论】:

        猜你喜欢
        • 2016-11-12
        • 1970-01-01
        • 2022-01-04
        • 2017-04-12
        • 2017-02-04
        • 2018-11-17
        • 2019-05-28
        • 1970-01-01
        相关资源
        最近更新 更多