我正在处理类似于以下内容的对象(虽然此对象有4个键/值对,但我的实际对象可以包含任意数量的对象):
var myObj = {
action: 'open',
card: 'Comment card name',
id: '54AEF364',
url: 'www.myurl.com'
};
我尝试将键和值添加到单个字符串中,用"分隔:"和" |",像这样:
var myString = 'action:open|card:Comment card name|id:54AEF364|url:www.myurl.com'
我尝试使用for ... in循环来执行此操作:
for (var i in myObj) {
var myString += i + ':' + myObj[i] + '|';
}
我能够获得我需要的大部分内容,但有两个例外:
我该如何做到这一点?
答案 0 :(得分:4)
使用地图和数组连接:
const myObj = {
action: 'open',
card: 'Comment card name',
id: '54AEF364',
url: 'www.myurl.com'
};
const myObjSerialized = Object.keys(myObj).map(key => `${key}:${myObj[key]}`).join('|');
console.log(myObjSerialized);
答案 1 :(得分:0)
你总能找到值得信赖的人。标准for
循环并迭代对象的键。
var myObj = {
action: 'open',
card: 'Comment card name',
id: '54AEF364',
url: 'www.myurl.com'
};
var serialize = function(data){
var keys = Object.keys(data), string = "";
for(var k=0; k<keys.length; ++k){
if(k > 0) string += '|';
string += keys[k]+':'+data[keys[k]];
}
return string;
}
console.log(serialize(myObj));
&#13;
答案 2 :(得分:0)
未定义与变量myString
相关。您必须在for循环中使用它之前声明变量:
var myObj = {
action: 'open',
card: 'Comment card name',
id: '54AEF364',
url: 'www.myurl.com'
};
var myString = "";
for (var i in myObj) {
myString += i + ':' + myObj[i] + '|';
}
console.log(myString);
然后你可以删除最后一个“|”那样:
if (myString.length > 0) {
myString = myString.substring(0, myString.length - 1);
}
然而,有一种更优雅的方式。用数组替换字符串并连接循环末尾的项目:
var myArray = [];
for (var i in myObj) {
myArray.push(i + ':' + myObj[i]);
}
var myString = myArray.join("|");