2

オブジェクト リテラルを使用して、次のようにキーと値を文字列に追加し、各反復の最後に文字を追加しようとしています。

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];
}

オブジェクトがインデックス化されていないことを考えると、このタスクを実行するためにオブジェクトの最後のプロパティを決定するにはどうすればよいですか?

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

それを行うには多くの方法があります。1 つは、すべてのプロパティに を追加&し、最後から削除することです (反復中に参照を保持し、for..in の後に参照から削除します)。もう 1 つの方法は、プロパティの順序付きリストを取得し、それを単純に繰り返すことです。

var keys = Object.keys(properties);

for (var i=0; i<keys.length; i++) {
  url = url + prop + '=' + properties[prop] + (i === keys.length-1 ? '' : '&');
}

免責事項: オブジェクト プロパティは順序付けされていません。上記のコードは&すべてのプロパティの末尾に配置されますが、オブジェクト プロパティに対する 1 回の通常の反復では、&最初のものを返す可能性がありますが、それは保証されません。

于 2013-10-28T17:12:17.720 に答える
0

私が使用した簡単で汚い解決策の 1 つは、substr メソッドです。末尾の「&」をすべての値に追加し、後で削除します。

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