function sortproducts(filprodlist)
{
var prod;
var k = 0;
for (i = 0; i < filprodlist.length; i++) {
var k = i + 1;
var p=filprodlist[i].EntityKey.substr(filprodlist[i].EntityKey.length - 1);
var p2=filprodlist[k].EntityKey.substr(filprodlist[k].EntityKey.length - 1);
if ( p>p2) {
temp = filprodlist[k];
filprodlist[k] = filprodlist[i];
filprodlist[i] = temp;
}
}
rederProduct(filprodlist);
}
执行上面的代码时出现以下错误 TypeError:filprodlist [k]未定义
答案 0 :(得分:1)
原因
在最后一次迭代中,i
是数组的最后一个元素。您正在使用var k = i + 1;
,其中k
不存在。因此,你得到了错误。
所以使用
for (i = 0; i < filprodlist.length - 1; i++) {
而不是
for (i = 0; i < filprodlist.length; i++) {
答案 1 :(得分:0)
我们说filprodlist
有10个项目。然后将项目编入索引0-9,并使i
经过0-9。在每次迭代中,您都要定义k = i + 1
。因此,在上一次迭代i = 9
,k = 10
中,您正在尝试访问不存在的filprodlist[10]
(返回undefined
)。解决方案是@ Satpal的答案。
答案 2 :(得分:0)
不要var
内部循环,块在 JavaScript 中没有范围,var
要在一个var
语句中使用的每个变量。当最高索引到达结尾时结束循环(k
)。您可以将k
移到for
的迭代步骤中,因为您也正在迭代这一步。
function sortproducts(filprodlist) {
var prod, i, k, p, p2, temp;
for (i = 0, k = 1; k < filprodlist.length; ++i, ++k) {
p = filprodlist[i].EntityKey.substr(filprodlist[i].EntityKey.length - 1);
p2 = filprodlist[k].EntityKey.substr(filprodlist[k].EntityKey.length - 1);
if (p > p2) {
temp = filprodlist[k];
filprodlist[k] = filprodlist[i];
filprodlist[i] = temp;
}
}
rederProduct(filprodlist);
}
另一种方法是忘记k
,从i = 1
开始并使用i - 1
和i
,这意味着您使用较少的变量进行迭代,您可能更容易在脑海中遵循代码。