23

我对 JavaScript 相当陌生,不确定这是否可行,但基本上我想获取一个对象并将其转换为格式中的字符串数组;array[0] = 'prop1=value1'

这背后的原因是我让用户将 k=v 对的列表输入到表单中,后来它被写为 json blob 中的对象。从键值 csl 到 json 对象很简单,现在我需要以另一种方式返回(我已经通过 ajax 调用接收到 JSON 并希望填充一个空白表单)。这在 JavaScript 中可能吗?如果没有,请提供合理的解决方法。

示例代码;

调试器中的对象;

 Object
        private_key: "private-key"
        public_key: "public-key"

我需要将其转换为;

 "private_key=private-key,public_key=public-key"

基本上我需要这样的东西(伪代码)

var outputString = '';
foreach (prop in obj)
{
    outputString = outputString + prop.tostring() + '=' + prop.value + ',';
}
4

7 回答 7

41

你可能正在寻找类似的东西

var obj = {value1: 'prop1', value2: 'prop2', value3: 'prop3'};
var arr = [];
for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        arr.push(key + '=' + obj[key]);
    }
};
var result = arr.join(',');
alert(result);

请注意,如果您的值是字符串,它将正常工作;如果它们是复杂的对象,那么您需要添加更多代码。

或者您可以只使用jQuery.param,它可以满足您的需求,即使对于复杂类型也是如此(尽管它使用&字符作为分隔符,而不是逗号。

于 2013-01-30T23:25:42.110 回答
5

在 ES6 中,您可以使用Object.entries({object1:1,object2:2});. 结果是:[["object1",1],["object2",2]]

于 2017-11-30T22:39:41.190 回答
4
var array = [];
for (k in o)
{
    if (o.hasOwnProperty(k))
    {
        array.push(k+"="+o[k]);
    }
}

然后,您可以join为最终字符串创建数组。

于 2013-01-30T23:24:52.613 回答
4
var object = {
    private_key: "private-key",
    public_key: "public-key"
};

var array = [];
for (var prop in object)
    array.push(prop + "=" + object[prop]);
return array.join(','); // "private_key=private-key,public_key=public-key"

请注意,不保证订单。

于 2013-01-30T23:28:07.097 回答
2

obj = {
  private_key: "private-key",
  public_key: "public-key"
}

str = JSON.stringify(obj).replace(/[{}]/g, '').replace(/"/g, '').replace(/:/g, '=');
console.log("Using JSON.stringify:\n", str);

str = Object.keys(obj).map((key) => `${key}=${obj[key]}`).join(',')
console.log("Using ES6 keys/map:\n", str);

str = jQuery.param(obj).replace(/&/g,',');
console.log("Using jQuery.param:\n", str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

于 2017-11-24T10:08:24.783 回答
2
var obj =[
            {'2018-05-07':1},
            {'2018-05-08':3},
            {'2018-05-09':2}
        ];

        for(var i of obj) {
            var key = Object.keys(i).toString();
            console.log(i,'=',i[key]);
        }

结果

在此处输入图像描述

于 2018-05-11T07:34:40.427 回答
0

1 班轮:

Object.entries(yourObj).map(e => ({ name: e[0], value: e[1] }));

示例使用:

let yourObj = { foo: "bar", baz: "bas" };

// turn object properties into array entries
let array = Object.entries(yourObj).map(e => ({ name: e[0], value: e[1] }));

// returns
array = [
  { name: "foo", value: "bar" },
  { name: "baz", value: "bas" },
]
// loop over it
for (let prop of array) {
  console.log(prop.name, "=", prop.value);
}
// shows
foo = bar
baz = bas

或者,以您想要的格式创建字符串:

Object.entries(yourObj).map(e => e[0] + "=" + e[1]).join(",");
"foo=bar,baz=bas"
于 2021-01-19T00:23:57.873 回答