Javascript/Jquery JSON 对象到对象内的数组

标签 javascript jquery arrays json object

我在这个网站上看到了很多主题,但每个主题都涉及单个数组。

我的需要是将每个以数字为键的对象转换为数组。

例如, 我有一个像这样的对象:

{
  "parent":{
    "0":{
      "child":false
    },
    "1":{
      "child":false
    },
    "4": {
      "child":false
    }
  }
}

我愿意

{
  "parent": [
    {
      "child":false
    },
    {
      "child":false
    },
    null,
    null,
    {
      "child":false
    }
  ]
}

这是一个例子,我的对象可以非常深并且内容很多像这样的对象,所以我需要一个通用函数。

更新

到目前为止我尝试使用@Nenad Vracar 的代码:

function recursiveIteration(object) {
    var newob = {};
    for (var property in object) {
        if (object.hasOwnProperty(property)) {
            if (typeof object[property] == "object"){

                var result = {};
                var keys = Object.keys(object[property]);
                if ($.isNumeric(keys[0])) {
                                console.log("======> "+property+" is table");

                 for (var i = 0; i <= keys[keys.length - 1]; i++) {
                  if (keys.indexOf(i.toString()) != -1) {
                    result[property] = (result[property] || []).concat(object[property][i]);
                  } else {
                    result[property] = (result[property] || []).concat(null);
                  }
                                }
                                newob[property] = result;
                                 recursiveIteration(object[property]);
                        }       


                newob[property] = object[property];
                recursiveIteration(object[property]);
            }else{
                newob[property] = object[property];
            }
        }
    }
    return newob;
}

还有JSFiddle现场尝试

谢谢大家!

最佳答案

我想这就是你想要的:

var data = {
  "parent": {
    "0": {
      "child": false
    },
    "1": {
      "child": false
    },
    "4": {
      "child": false
    }
  }
};


var convert = function(data) {

  // not an object, return value
  if (data === null || typeof data !== 'object')
    return data;

  var indices = Object.keys(data);

  // convert children
  for (var i = 0; i < indices.length; i++)
    data[indices[i]] = convert(data[indices[i]]);

  // check if all indices are integers
  var isArray = true;
  for (var i = 0; i < indices.length; i++) {
    if (Math.floor(indices[i]) != indices[i] || !$.isNumeric(indices[i])) {
      isArray = false;
      break;
    }
  }

  // all are not integers
  if (!isArray) {
    return data;
  }
  // all are integers, convert to array
  else {
    var arr = [];
    for (var i = 0, n = Math.max.apply(null, indices); i <= n; i++) {
      if (indices.indexOf(i.toString()) === -1)
        arr.push(null);
      else
        arr.push(data[i]);
    }
    return arr;
  }

};

console.log( convert(data) );

这是一个工作 jsfiddle使用您在更新中提供的数据。

关于Javascript/Jquery JSON 对象到对象内的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585435/

相关文章:

javascript - 使用 ng-include 时如何使作用域函数工作?

javascript - 如何将 $PATH 设置为通过 node-pty 在 Node 中生成进程的一部分?

javascript - 返回数组而不是对象 laravel/javascript ajax 调用

javascript - Karate 模糊匹配 - 构建自定义标记

jquery - 如果输入类型复选框的值已选中 ="checked",则显示/隐藏特定的 div

javascript - 同时使用 dom 和 sDom 选项

javascript - FreeCodeCamp 上的 urlSlugify 在应该通过测试时却没有通过

arrays - 基于多个属性在 Swift 中过滤数组

jquery - $();是什么意思?

c++ - 为什么不打印 char 数组的单元化索引?