我有一个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'
而不是逗号或根本没有逗号来适当地做出反应。我怎么能这样做?
答案 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
这里有更新的代码,不包括牛津逗号:
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