赢得't循环数组javascript

won't loop array javascript

本文关键字:循环 数组 javascript 赢得      更新时间:2023-09-26

为什么我不能访问我的数组?

function map(array){
    for(i=0; i <=array.length; i++){
        var location=array[i].location;
        console.log("loc"+location);
        var user = array[i].from_user;
        console.log("user"+user);
        var date = array[i].created_at;
        var profile_img = array[i].profile_img;
        var text = array[i].text;
        var contentString = text;
        //geocode(user,date, profile_img, text, contentString,location);
    }
}

它让我对每个元素都没有定义。我想访问它并将变量传递给地理编码函数。数据结构:

array=[{user: a,user_id: b,date: c,profile_img: d,text: e,contentString: f,url:
      g,location:o},{user: a,user_id: b,date: c,profile_img: d,text: e,contentString: 
      f,url:g,location:o},{user: a,user_id: b,date: c,profile_img: d,text: 
      e,contentString: f,url: g,location:s}];

不要担心价值观。。!

我忘了提我第一次发帖(提问)的时间了。数组的位置插入到上一个函数中,而数组不包括以前函数

中的属性位置

调用函数时,请使用包含在数组文字中的对象文字结构,否则所有值都将作为未定义值返回。这就是你应该如何调用你的函数:

map([{ // array literal enclosing an object literal
    location   : 1,
    from_user  : 2,
    created_at : 3,
    profile_img: 4,
    text       : 5
}]);

此外,在您的循环中,更改:

for (i = 0; i <= array.length; i++ ) ...

for (var i = 0; i < array.length; i++) ...

如果你有一个预定义的数组,命名它并将其传递给如下函数:

map(arrayObj)

如果传入的array长度为0,则循环它的方式是尝试访问0ist元素,该元素将未定义。

然而,无论array的内容如何,这一行总是会给您带来麻烦:

for(i=0; i <=array.length; i++)

当检查arraylength属性时,它会告诉您数组中元素的数量。由于数组使用基于0的索引,因此每次使用此循环都会超出数组的边界。

var myArray = [1, 2, 3];
myArrary[0]; // This is 1
myArray[2]; // This is 3

由于您在0和数组的长度之间循环,正好是3,因此您尝试访问的最后一个元素将不存在。

myArray[3]; // Undefined

您需要检查i < array.length而不是i <= array.length

您的代码很好。通过提供的输入和功能,您可以获得以下信息:

loco
userundefined
loco
userundefined
locs
userundefined

每个用户出现未定义的原因是:

var user = array[i].from_user;
console.log("user"+user);

您传入的对象没有from_user属性,因此它自然会显示为未定义。也许你的意思是array[i].user_id

此外,正如唯美主义者所指出的,由于你检查长度的方式,你在数组的边界之外奔跑。改为:

for(var i = 0, n = array.length; i < n; i++) {
    // your code in here
}

请注意,我在i前面加了var,这样它就不会变成隐式全局。另外,我声明了第二个变量n,这样您只需要访问array.length一次。这是常见的做法。

所以,把它们放在一起:

function map(array){
    for(var i = 0, n = array.length; i < n; i++){
        var location=array[i].location;
        console.log("loc"+location);
        var user = array[i].user_id;
        console.log("user"+user);
        var date = array[i].created_at;
        var profile_img = array[i].profile_img;
        var text = array[i].text;
        var contentString = text;
        //geocode(user,date, profile_img, text, contentString,location);
    }
}
array=[{user: 'a',user_id: 'b',date: 'c',profile_img: 'd',text: 'e',contentString: 'f',url:
      'g',location:'o'},{user: 'a',user_id: 'b',date: 'c',profile_img: 'd',text: 'e',contentString: 
      'f',url:'g',location:'o'},{user: 'a',user_id: 'b',date: 'c',profile_img: 'd',text: 
      'e',contentString: 'f',url: 'g',location:'s'}];
map(array);

请注意,我将您的对象属性更改为字符串,这是因为您没有为这些属性提供值,但您可能不想这样做。输出为:

loco
userb
loco
userb
locs
userb

一切都很好。如果您仍然没有定义location,那么您的错误一定是您传递的对象的o属性。