Javascript:在对象上迭代并连接字符串
我有一个Javascript对象,其中包含其他对象。每个包含的对象都有一个Javascript:在对象上迭代并连接字符串,javascript,angularjs,string,iteration,string-concatenation,Javascript,Angularjs,String,Iteration,String Concatenation,我有一个Javascript对象,其中包含其他对象。每个包含的对象都有一个名称属性 我现在要做的是将这些名称属性连接到一个字符串。但是,我希望这些字符串在最后一个字符串之前用逗号和“”和“分隔 为了更好地理解,我要迭代的对象如下所示: var objects = { o1: {name: 'name1'}, o2: {name: 'name2'}, o3: {name: 'name3'} }; 现在,我希望最后的字符串是:“name1、name2和name3的串联”
名称
属性
我现在要做的是将这些名称属性连接到一个字符串。但是,我希望这些字符串在最后一个字符串之前用逗号和“”和“分隔
为了更好地理解,我要迭代的对象如下所示:
var objects = {
o1: {name: 'name1'},
o2: {name: 'name2'},
o3: {name: 'name3'}
};
现在,我希望最后的字符串是:“name1、name2和name3的串联”
到目前为止,我尝试使用的是angular.forEach
:
var myString = 'Concatenation of ';
angular.forEach(objects, function(o) {
myString += o.name + ', ';
}
不难注意到,我的字符串将变成“名称1、名称2、名称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;
}
var myString='Concatenation of';
var i=0;
var keys=Object.keys(对象);
对于(i=0;i=0)
myString+=(i
试试下面的方法
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 + ', ';
}
}
下面是一个使用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
objects
是一个对象而不是数组,因此没有length
属性。还有,o
从何而来?angular.forEach(对象,函数(o,i,r){…if(r[i+1])myString+=”,”;
但更好的是做myString=angular.map(对象,函数(o){返回o.name;})。join(“,”);
您的解决方案在“and”之前添加了一个逗号。您必须以某种方式将最后一个元素和最后一个元素之前的元素合并。这个逗号被称为“oxford逗号”。我认为这在这里是有意义的!无论如何,我会根据您的要求更新我的解决方案。嗯,谁说stackoverflow不能教的不仅仅是编程我不知道牛津逗号:)但是,我正在为一个仅以德语发布的应用程序使用此代码,其中没有串行逗号,因此我的用例需要更改。感谢您的编辑和帮助,非常感谢。