如何获取对象中的第一个和最后一个属性?

时间:2017-11-02 19:30:28

标签: javascript object

我正在处理类似于以下内容的对象(虽然此对象有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] + '|';
}

我能够获得我需要的大部分内容,但有两个例外:

  1. '未定义'发生在第一个属性名称之前
  2. 对于最后一个键/值对,不应该是" |"在最终值之后,因为这是字符串的结尾
  3. 我该如何做到这一点?

3 个答案:

答案 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;
&#13;
&#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("|");