如何转换对象键和&格式化字符串的值?

时间:2013-10-01 06:44:48

标签: javascript jquery arrays object multidimensional-array

我需要将'keys'作为一个字符串,然后将它们的值作为另一个字符串。

这是我写这个循环的失败尝试,它只能在一个层面上运行...

function convertToString(objArray) {
    var str = '';

    for (var i = 0; i < objArray.length; i++) {
        var line = '';
        for (var index in objArray[i]) {
            if (line != '') line += ','

            line += objArray[i][index];
        }

        str += line + '\r\n';
    }

    return str;
}

这是一个示例对象,真实的对象要大得多,但这应该用于示例目的:

var obj = {
    "a": "a",
        "b": [{
        "c": "c",
            "d": "d"
    }, {
        "e": "e",
            "f": "f"
    }],
    "g": true,
    "h": {
        "i": "i",
        "j": "j",
        "k": 1
    },
    "l": "l"
};

的所需输出为:

"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"

他们各自的值 string 将如下所示:

"a", object, "c", "d", "e", "f", true, object, "i", "j", 1, "l"

如果有人能引导我朝着正确的方向前进,那就太棒了,我不指望有人为我编写代码,但启动我的事情会很棒。

这背后的目的是,我可以将我的响应对象转换为我可以用来下载相同数据的CSV文件的格式。

3 个答案:

答案 0 :(得分:4)

您可以在javascript中使用递归for..in,如下所示:

http://jsbin.com/udEBAxe/2/edit

var obj = {
    "a": "a",
        "b": [{
        "c": "c",
            "d": "d"
    }, {
        "e": "e",
            "f": "f"
    }],
    "g": true,
    "h": {
        "i": "i",
        "j": "j",
        "k": 1
    },
    "l": "l"
};

function inspect(o, props){
  var kk = [];
  for(var p in o) {
    if(o.hasOwnProperty(p)) {      
      if(typeof o[p] == 'object')
        kk = kk.concat(inspect(o[p], props));
      else {
        var m = (props) ? o[p] : p;
        kk.push(m);
      }
    }
  }
  return kk;
}

var s = inspect(obj,false);
alert(s.join(','));

s = inspect(obj,true);
alert(s.join(','));

答案 1 :(得分:2)

尝试

var obj = {
    "a": "a",
        "b": [{
        "c": "c",
            "d": "d"
    }, {
        "e": "e",
            "f": "f"
    }],
        "g": true,
        "h": {
        "i": "i",
            "j": "j",
            "k": 1
    },
        "l": "l"
};

function x(obj, keys, vals) {
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            var val = obj[key];
            keys.push(key);
            vals.push(val);
            if (typeof val == 'object') {
                //borrowed from angularjs isArray
                //http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js
                if (toString.apply(val) == '[object Array]') {
                    for (var i = 0; i < val.length; i++) {
                        x(val[i], keys, vals)
                    }
                } else {
                    x(val, keys, vals)
                }
            }
        }
    }
}

var keys = [],
    vals = [];
x(obj, keys, vals);
console.log(keys)
console.log(vals)

演示:Fiddle

答案 2 :(得分:0)

好的,您的输出会显示值,而不是对象的键。

您只需使用underscore.js库获取所有密钥即可。这只是顶级的示例:

_.keys(obj);
// output : [ "a","b","g","h","l" ];

文档:http://underscorejs.org/#keys