我已经运行了代码。 代码的某些部分应该更改queryParams数组的两个值:
myParam1 = 'sort_by';
myParam2 = 'sort_order';
queryParams[myParam1] = 'title';
if (queryParams[myParam2] == 'ASC') {
queryParams[myParam2] = 'DESC';
} else { //DESC or undefined
queryParams[myParam2] = 'ASC';
}
queryPairs = [];
for (var index in queryParams) {
queryPairs.push(index + "=" + queryParams[index]);
}
不幸的是,一些逻辑已经改变,现在有时queryParams
在这个脚本的开头有长度0,然后这个部分就失效了。
queryParams[myParam1] = 'title';
和
queryParams[myParam2] = 'DESC'
行不会更改queryParams.length,因此长度仍为0且循环
for (var index in queryParams){
不按预期工作。
我还没有找到如何在数组中添加键/值。
答案 0 :(得分:3)
您对JavaScript的标准数组aren't really arrays at all。
这一事实感到有些困惑您没有在引用的代码中使用queryParams
作为数组。您将其用作对象。默认情况下,对象没有length
属性。
你还没有说改变了什么,所以很难帮助你,但请注意,即使queryParams
是一个数组并且你按原样添加一个属性,length
仍将保留0
。数组的length
只涉及一类特殊属性(符合“数组索引”定义的属性),而不是所有属性。
可能会有所帮助的一些例子:
var a = []; // a is an array
console.log(a.length); // "0"
a['foo'] = 'bar';
console.log(a.length); // "0", the `foo` property doesn't have any effect on `length`
a[0] = 'zero';
console.log(a.length); // "1", the `0` property *does* have an effect on `length`
var o = {}; // o is an object
var myParam1 = 'sort_by';
var myParam2 = 'sort_order';
var propertyName;
o[myParam1] = 'foo';
o[myParam2] = 'DESC';
for (propertyName in o) {
console.log(propertyName); // "sort_by" and then "sort_order" (the order is not defined)
}