如何遍历包含对象的数组并访问它们的属性
我想遍历数组中包含的对象,并更改每个对象的属性。 如果我这样做:
for (var j = 0; j < myArray.length; j++){ console.log(myArray[j]); }
控制台应该调出数组中的每个对象,对吧? 但实际上它只显示第一个对象。 如果我在控制台之外logging数组,那么所有对象都会出现,所以肯定会有更多内容。
无论如何,这是下一个问题。 如何使用循环访问数组中的Object1.x?
for (var j = 0; j < myArray.length; j++){ console.log(myArray[jx]); }
这返回“未定义”。 循环之外的控制台日志告诉我,对象都具有“x”的值。 我如何在循环中访问这些属性?
我被推荐到其他地方使用单独的数组为每个属性,但我想确保我已经用尽了这条道路。
谢谢!
使用forEach其内置的数组函数
yourArray.forEach( function (arrayItem) { var x = arrayItem.prop1 + 2; alert(x); });
for (var j = 0; j < myArray.length; j++){ console.log(myArray[j].x); }
在ECMAScript 2015中又名ES6,你可以使用for..of循环遍历一个对象数组。
for (let item of items) { console.log(item); // Will display contents of the object inside the array }
在发布这个答案的时候,对于Internet Explorer来说支持是不存在的,但是通过使用像Traceur或者Babel这样的转译器,你可以使用像这样的新的Javascript特性,而不必担心浏览器支持什么。
这里是一个关于如何做到这一点的例子:)
var students = [ { name : "Mike", track: "track-a", achievements: 23, points : 400, }, { name : "james", track: "track-a", achievements: 2, points : 21, }, ] students.forEach(myFunction); function myFunction (item, index) { for( var key in item ) { console.log(item[key]) } }
myArray[jx]
在逻辑上不正确。
使用(myArray[j].x);
代替
for (var j = 0; j < myArray.length; j++){ console.log(myArray[j].x); }
通过一组对象循环是一个非常基本的function。 这对我有用。
var person = []; person[0] = { firstName : "John", lastName : "Doe", age : 60 }; var i, item; for (i = 0; i < person.length; i++) { for (item in person[i]) { document.write(item + ": " + person[i][item] + "<br>"); } }
自ES5 +以来,使用forEach方法非常简单。 您可以直接更改数组中每个对象的每个属性。
myArray.forEach(function (arrayElem){ arrayElem = newPropertyValue; });
如果你想访问每个对象的特定属性:
myArray.forEach(function (arrayElem){ arrayElem.nameOfYourProperty = newPropertyValue; });
这是迭代对象数组的另一种方法(您需要在文档中包含jQuery库)。
$.each(array, function(element) { // do some operations with each element... });
这将工作。 循环彻底的数组(yourArray)。 然后循环每个对象(eachObj)的直接属性。
yourArray.forEach( function (eachObj){ for (var key in eachObj) { if (eachObj.hasOwnProperty(key)){ console.log(key,eachObj[key]); } } });
数组对象迭代,使用jQuery,(使用第二个参数来打印string)。
$.each(array, function(index, item) { console.log(index, item); });