【问题标题】:Javascript - array in key/value order to JSONJavascript - 以键/值顺序排列到 JSON 的数组
【发布时间】:2015-10-08 04:52:53
【问题描述】:

我有以下数组(由 Redis HSCAN 返回):

[ 'foo',
  '1437234647',
  'bar',
  '1437234633' ]

这是按键、值、键、值等顺序。我希望将其转换为 JSON 对象,如下所示:

{
  "foo": "1437234647",
  "bar": "1437234633"
}

如何做到这一点?我猜在遍历数组时使用奇数/偶数?


更新 - 这是我想出的,但正在寻找更好的解决方案:

function keyValueArrayToJson(inArr){

  function isNumber(n) {
    return n == parseFloat(n);
  }

  function isEven(n) {
    return isNumber(n) && (n % 2 == 0);
  }

  var out = {};
  for (var i in inArr) {
    if(isEven(i)){
        out[inArr[i]] = '';
    } else {
        var p = i -1;
        out[inArr[p]] = inArr[i];
    }
  }
  return out;
}

更新 2 - 感谢@squint - 结果对象的排序不是必需的。

【问题讨论】:

  • 你尝试过任何东西吗?
  • 您似乎暗示您希望对结果对象进行排序。如果是这样,你不能有任何保证。

标签: javascript arrays json redis


【解决方案1】:

您只需要 for loop2 作为 step

var array = ['foo', '1437234647', 'bar', '1437234633'];
    var object = {};
    for (i = 0; i < array.length - 1; i += 2) {
      object[array[i]] = array[i + 1];
    }
    alert(JSON.stringify(object));

【讨论】:

    【解决方案2】:

    是的,一个 for 循环应该可以解决问题

    var arr=[ 'foo','1437234647','bar','1437234633' ];
    var obj={};
    for(i=0;i<arr.length-1;i+=2){
       obj[arr[i]]=arr[i+1];
    }
    document.querySelector("pre").textContent = JSON.stringify(obj);
    &lt;pre&gt;&lt;/pre&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 2015-05-09
      • 2019-03-25
      • 2020-06-13
      • 2012-09-02
      • 2022-01-02
      • 2016-09-01
      • 1970-01-01
      相关资源
      最近更新 更多