Javascript:迭代对象并连接字符串

时间:2015-09-24 09:02:07

标签: javascript angularjs string iteration string-concatenation

我有一个Javascript对象,其中包含其他对象。每个包含的对象都有name属性。

我现在要做的是将这些名称属性连接到一个String。但是,我想在最后一个String之前用逗号和'and'分隔这些字符串。

为了更好地理解,我想迭代的对象看起来像这样:

var objects = {
    o1: {name: 'name1'}, 
    o2: {name: 'name2'},
    o3: {name: 'name3'}
};

现在我想要的字符串是:'Concatenation of name1, name2 and name3'

到目前为止,我尝试使用angular.forEach

var myString = 'Concatenation of ';

angular.forEach(objects, function(o) {
    myString += o.name + ', ';
}

不难注意到,我的字符串将变为'Concatenation of name1, name2, name3, '

所以真正的问题是我如何检查我的对象中的哪个位置并通过连接'and'而不是逗号或根本没有逗号来适当地做出反应。我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

使用传统的for循环:

var myString = 'Concatenation of ';
var i = 0;
var keys = Object.keys(objects);
for (i =0; i<keys.length; i++) {
   if (i > 0)
      myString += (i < keys.length - 1) ? ', ' : ' and ';
   myString += objects[keys[i]].name;
}

答案 1 :(得分:1)

尝试类似

的内容
var myString = 'Concatenation of ';
var i = 1;
angular.forEach(objects, function(o) {
  i += 1;
  if(i === Object.keys(objects).length) {
     myString = myString.subString(1, myString .length-1);
     myString += ' and '+ o.name;
   } else {
     myString += o.name + ', ';
   }

}

答案 2 :(得分:1)

这是使用jQuery的简短而又甜蜜的解决方案:

<强>代码:

var myString = 'Concatenation of ';
var arr = $.map(objects, function(o) { return o["name"]; })
// append 'and ' to the last element before hand.
arr[arr.length - 1] = "and "+arr[arr.length - 1]; 
console.log(myString+arr.join(", "));
// Concantenation of name1, name2, and name3

Demo Fiddle

更新

这里有更新的代码,不包括牛津逗号:

var myString = 'Concatenation of ';
var arr = $.map(objects, function(o) { return o["name"]; })
var lastElem = " and " +arr.pop();
console.log(myString+arr.join(", ")+lastElem);
// Concantenation of name1, name2 and name3

Updated Fiddle