【问题标题】:How can I convert object keys & values to formatted string? [closed]如何将对象键和值转换为格式化字符串? [关闭]
【发布时间】:2013-10-01 06:44:48
【问题描述】:

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

这是我编写此循环的失败尝试,它仅在一个级别上真正有效...

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"
};

我希望 keys 的输出是:

"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 文件的格式。

【问题讨论】:

  • 所以你想折叠结构?
  • @EvanKnowles 在某种意义上是的!
  • 这样做有什么意义?
  • 我想将此数据发送到 csv,基本上我需要将我的响应转换为可读格式以下载包含相同信息的 csv。 @未定义
  • 此问题已关闭,因为您没有尝试自己解决问题,关闭原因包括“要求代码的问题必须证明对正在解决的问题的最低理解。包括尝试的解决方案,为什么他们没有奏效,却达到了预期的结果。”很遗憾,在投票结束时没有人费心实际发表评论,但你去了。如果您可以尝试至少展示一些您自己的方法,这可能会有很大帮助。

标签: javascript jquery arrays object multidimensional-array


【解决方案1】:

您可以在 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(','));

【讨论】:

  • 我将此标记为正确,您已经完全实现了我所追求的目标,用非常少的代码,甚至格式化了字符串。非常感谢。
  • jsfiddle.net/shannonhochkins/vUnF9/844 这是您对我的主要对象的出色工作:)
  • 看起来很棒,干杯!
【解决方案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

【讨论】:

  • 你是个传奇。这正是我所追求的!
  • 这实际上似乎与我的较大比例示例略有不同,jsfiddle.net/shannonhochkins/vUnF9/842 请注意,ID 与第三个键不匹配,由于某种原因,第三个键上也有一个对象,你知道吗为什么?
  • @ShannonHochkins 它对我来说看起来不错jsfiddle.net/arunpjohny/69enZ/7 ...文本表示看起来像一个问题,因为因为结果是一个数组......它将被打印为“对象,对象”
  • 将其转换为字符串格式时,请参见我的示例,键的 vs 值未正确对齐。
【解决方案3】:

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

您可以使用 underscore.js 库简单地获取所有键。这只是顶级的示例:

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

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

【讨论】:

  • 谢谢,但我确实在示例中声明我需要所有级别
  • 我只是让路
  • 我需要键和值,而不仅仅是一个,谢谢。
猜你喜欢
  • 2018-04-25
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 2020-09-27
相关资源
最近更新 更多