2

使用对象文字,我试图将键和值添加到字符串并在每次迭代结束时附加一个字符,如下所示:

var url = 'www.example.com/'

var properties = {'foo': 'xyz123', 'bar': 456, 'baz': true}

for (prop in properties) {
  url = url + prop + '=' + properties[prop] + '&';
}

但是,我想添加不添加'&'if 它是最后一个属性的条件逻辑:

for (prop in properties) {
  // If not last:
    url = url + prop + '=' + properties[prop] + '&';
  // Otherwise:
    url = url + prop + '=' + properties[prop];
}

考虑到对象没有被索引,我如何确定对象的最后一个属性来执行此任务?

4

4 回答 4

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('&');
于 2013-10-28T17:11:38.383 回答
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];
}

话虽这么说-如果您有尾随,是否有真正的区别&

于 2013-10-28T17:06:56.397 回答
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 ? '' : '&');
}

免责声明:对象属性没有排序。上面的代码确实放在&所有属性的末尾,但是对对象属性的一次和通常的迭代可能会返回第一个的那些&,但这不能保证。

于 2013-10-28T17:12:17.720 回答
0

我使用的一种快速而肮脏的解决方案是 substr 方法。只需将尾随 '&' 添加到所有值,然后稍后将其删除:

url = urlWithExtraAmpersand.substr(urlWithExtraAmpersand.length - 1);
于 2013-10-28T17:38:57.550 回答