JavaScript数组 - 未捕获的TypeError:无法读取属性'length'

时间:2014-03-28 20:21:16

标签: javascript arrays cordova random

我正在开发一个使用内部数据库的Cordova / Phonegap应用程序...... 通常我会进行查询,然后以这种方式读取结果:

for (var i=0;i<results.rows.length;i++)
{
     name=(results.rows.item(i).name);
     alert(name);
}

由于RANDOM() SQLite函数一直在给我problems,我自己决定搞乱结果:

function shuffle(array) {
    var counter = array.length, temp, index;

    // While there are elements in the array
    while (counter > 0) {
        // Pick a random index
        index = Math.floor(Math.random() * counter);

        // Decrease counter by 1
        counter--;

        // And swap the last element with it
        temp = array[counter];
        array[counter] = array[index];
        array[index] = temp;
    }

    return array;
}
var resultArray = [];
for(var x=0; x < results.rows.length; x+=1) {
     resultArray.push(results.rows.item(x));
}
var res = shuffle(resultArray);
for (var i=0;i<res.rows.length;i++){
     name=(res.rows.item(i).name);
}

错误:

Uncaught TypeError: Cannot read property 'length' of undefined

为什么会这样?我怎么解决它? 谢谢!

2 个答案:

答案 0 :(得分:2)

var res = shuffle(resultArray);
for (var i=0;i<res.length;i++){
     name=(res.item(i).name);
}

若然?

或更好

var res = shuffle(resultArray);
for (var i=0;i<res.length;i++){
     name=(res[i].name);
}

如果没有 - 请在

中显示你在控制台中得到的内容
var res = shuffle(resultArray);
console.log(res);
for (var i=0;i<res.length;i++){
     name=(res[i].name);
     console.log(res[i]);
}

P.S。并记住,所有值都设置在单个变量'name'中 - 所以他们互相踢了

答案 1 :(得分:1)

你只是推送到resultArray只有没有行的项目, 因此,您只需要通过resultArray本身进行遍历。

resultArray.push(results.rows.item(x));

因此使用:

var res = shuffle(resultArray);
for (var i=0; i < res.length; i++) {
    name = (res[i].name);
}