使用对象文字,我试图将键和值添加到字符串中,并在每次迭代结束时附加一个字符,如下所示:
var url = 'www.example.com/'
var properties = {'foo': 'xyz123', 'bar': 456, 'baz': true}
for (prop in properties) {
url = url + prop + '=' + properties[prop] + '&';
}
但是,如果它是最后一个属性,我想添加不添加'&'
的条件逻辑:
for (prop in properties) {
// If not last:
url = url + prop + '=' + properties[prop] + '&';
// Otherwise:
url = url + prop + '=' + properties[prop];
}
考虑对象没有编入索引,如何确定对象的最后一个属性来执行此任务?
答案 0 :(得分:3)
更优雅的方法是使用临时数组作为参数,然后用&
加入它的条目:
var url = 'www.example.com/', buf = [];
var properties = {'foo': 'xyz123', 'bar': 456, 'baz': true}
for (prop in properties) {
buf.push(prop + '=' + properties[prop]);
}
url = url + buf.join('&');
答案 1 :(得分:2)
反之亦然 - 添加&
而不是附加&
var url = 'www.example.com/?' //add a ? to indicate a query string is starting
var properties = {'foo': 'xyz123', 'bar': 456, 'baz': true}
for (prop in properties) {
url = url + '&' + prop + '=' + properties[prop];
}
这就是说 - 如果你有一个尾随的&
?
答案 2 :(得分:0)
有很多方法可以做到这一点。一种方法是将&
附加到所有属性并从最后删除它(在迭代时保留引用,在for..in之后从引用中删除)。
另一种方法是获得一个有序的属性列表,并简单地迭代:
var keys = Object.keys(properties);
for (var i=0; i<keys.length; i++) {
url = url + prop + '=' + properties[prop] + (i === keys.length-1 ? '' : '&');
}
免责声明:未订购对象属性。上面的代码确实将&
放在所有属性的末尾,但是对象属性的一次和通常的迭代可能会首先返回&
的那些,但这不能保证。
答案 3 :(得分:0)
一个快速&amp;我用过的脏解是substr方法。只需添加尾随'&amp;'到所有值,然后将其删除:
url = urlWithExtraAmpersand.substr(urlWithExtraAmpersand.length - 1);