Javascript Array 的可读性

Readability of Javascript Array

本文关键字:可读性 Array Javascript      更新时间:2023-09-26

我有一个类似于以下内容的 JSON 对象

{
  "kay1":"value1",
  "key2":"value2",
  "key3":{
    "key31":"value31",
    "key32":"value32",
    "key33":"value33"
  }
}

我想用 JSON 数组替换它,如下所示

[
  "value1",
  "value2",
  [
    "value31",
    "value32",
    "value33"
  ]
]

我将 JSON 对象更改为 JSON 数组的动机是它需要更少的网络流量,从 ARRAY 获取值比 OBJECT 高效等。

我面临的一个问题是ARRAY的可读性非常小于OBJECT。

有没有办法提高可读性?

在这里,我编写了一个函数,它将对象的所有实例转换为数组并为您提供期望的结果。

var objActual = {
  "key1":"value1",
  "key2":"value2",
  "key3":{
    "key31":"value31",
    "key32":"value32",
    "key33": {
      "key331" : "value331",
      "key332" : "value332"
    }
  }
};

ObjectUtil = {
  isObject : function(variable) {
    if(Object.prototype.toString.call(variable) === '[object Object]') {
        return true;
    }
    return false;
  },
  convertToArray : function(obj) {
     var objkeys = Object.keys(obj);
     var arr = [];
     objkeys.forEach(function(key) {
        var objectToPush;
        if(ObjectUtil.isObject(obj[key])) {
           objectToPush = ObjectUtil.convertToArray(obj[key]);
        } else {
           objectToPush = obj[key];
        }
        arr.push(objectToPush);
     });
     return arr;
  }
};
var result = ObjectUtil.convertToArray(objActual);
console.log(result);

在我看来,它应该是:

{
  "kay1":"value1",
  "key2":"value2",
  "key3":["value31", "value32", "value33"]
}

使用 init 方法对时间至关重要。因此,请使用方案或分配静态 JSON 来Storage.keys并将批量数据数组分配给store.data。 之后您可以使用store.get("key3.key31")。http://jsfiddle.net/2o411k00/

if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();
    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }
    return res;
  };
}

var data = {
  "kay1":"value1",
  "key2":"value2",
  "key3":{
    "key31":"value31",
    "key32":"value32",
    "key33":"value33"
  }
}

var Storage = function(data){
    this.rawData = data;
    return this;
}
Storage.prototype.init = function(){
    var self = this;
    var index = 0;
    var mp = function(dat, rootKey){
        var res = Object.keys(dat).map(function(key, i) {
            var v = dat[key];
            if (typeof(v) === 'object'){
                mp(v, key);
            } else {
                self.data.push(v);
                var nspace = rootKey.split(".").concat([key]).join(".");
                self.keys[nspace] = index++;
            }
        });
    }
    mp(this.rawData, "");
}
Storage.prototype.get = function(key){
    return this.data[this.keys[key]];
};
Storage.prototype.data = [];
Storage.prototype.keys = {};
var store = new Storage(data);
console.log(data);
store.init();
console.log("keys", store.keys);
console.log("data", store.data);
console.log("kay1=", store.get(".kay1"));
console.log("key2=", store.get(".key2"));
console.log("key3.key31=", store.get("key3.key31"));
console.log("key3.key32=",store.get("key3.key32"));
console.log("key3.key33=", store.get("key3.key33"));