How to loop through an array containing objects and access their properties
我想循环遍历数组中包含的对象,并更改每个对象的属性。如果我这样做:
1 2 3 4 5 | for (var j = 0; j < myArray.length; j++){ console.log(myArray[j]); } |
控制台应该显示数组中的每个对象,对吗?但实际上它只显示第一个对象。如果我将数组记录在循环之外,那么所有的对象都会出现,所以肯定会有更多的对象。
不管怎样,这是下一个问题。如何使用循环访问,例如数组中的object1.x?
1 2 3 4 5 | for (var j = 0; j < myArray.length; j++){ console.log(myArray[j.x]); } |
这将返回"undefined"。循环外部的控制台日志再次告诉我,对象都有"x"的值。如何在循环中访问这些属性?
我被推荐到其他地方为每个属性使用单独的数组,但我想确保我已经耗尽了这条路。
谢谢您!
使用foreach的内置数组函数。
1 2 3 4 | yourArray.forEach(function (arrayItem) { var x = arrayItem.prop1 + 2; console.log(x); }); |
在javascript中,以函数式编程方式在数组中循环的一些用例:
1。只需在数组中循环1 2 3 4 5 6 7 | const myArray = [{x:100}, {x:200}, {x:300}]; myArray.forEach((element, index, array) => { console.log(element.x); // 100, 200, 300 console.log(index); // 0, 1, 2 console.log(array); // same myArray object 3 times }); |
注意:严格来说,array.prototype.foreach()不是一种函数方式,因为它作为输入参数的函数不应该返回一个值,因此不能将其视为纯函数。
2。检查数组中的任何元素是否通过测试1 2 3 4 5 6 7 8 9 | const people = [ {name: 'John', age: 23}, {name: 'Andrew', age: 3}, {name: 'Peter', age: 8}, {name: 'Hanna', age: 14}, {name: 'Adam', age: 37}]; const anyAdult = people.some(person => person.age >= 18); console.log(anyAdult); // true |
三。转换为新数组
1 2 3 4 | const myArray = [{x:100}, {x:200}, {x:300}]; const newArray= myArray.map(element => element.x); console.log(newArray); // [100, 200, 300] |
注意:map()方法创建一个新数组,结果是对调用数组中的每个元素调用一个提供的函数。
4。对一个特定属性求和,并计算其平均值1 2 3 4 5 6 7 | const myArray = [{x:100}, {x:200}, {x:300}]; const sum = myArray.map(element => element.x).reduce((a, b) => a + b, 0); console.log(sum); // 600 = 0 + 100 + 200 + 300 const average = sum / myArray.length; console.log(average); // 200 |
5。基于原始数组创建新数组,但不修改它
1 2 3 4 5 6 7 8 9 10 11 | const myArray = [{x:100}, {x:200}, {x:300}]; const newArray= myArray.map(element => { return { ...element, x: element.x * 2 }; }); console.log(myArray); // [100, 200, 300] console.log(newArray); // [200, 400, 600] |
6。计算每个类别的数量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | const people = [ {name: 'John', group: 'A'}, {name: 'Andrew', group: 'C'}, {name: 'Peter', group: 'A'}, {name: 'James', group: 'B'}, {name: 'Hanna', group: 'A'}, {name: 'Adam', group: 'B'}]; const groupInfo = people.reduce((groups, person) => { const {A = 0, B = 0, C = 0} = groups; if (person.group === 'A') { return {...groups, A: A + 1}; } else if (person.group === 'B') { return {...groups, B: B + 1}; } else { return {...groups, C: C + 1}; } }, {}); console.log(groupInfo); // {A: 3, C: 1, B: 2} |
7。基于特定条件检索数组的子集
1 2 3 4 | const myArray = [{x:100}, {x:200}, {x:300}]; const newArray = myArray.filter(element => element.x > 250); console.log(newArray); // [{x:300}] |
注意:filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。
8。排序数组1 2 3 4 5 6 7 8 9 10 11 12 | const people = [ { name:"John", age: 21 }, { name:"Peter", age: 31 }, { name:"Andrew", age: 29 }, { name:"Thomas", age: 25 } ]; let sortByAge = people.sort(function (p1, p2) { return p1.age - p2.age; }); console.log(sortByAge); |
1 2 3 4 5 6 7 | const people = [ {name:"john", age:23}, {name:"john", age:43}, {name:"jim", age:101}, {name:"bob", age:67} ]; const john = people.find(person => person.name === 'john'); console.log(john); |
方法的作用是:返回数组中满足所提供测试函数的第一个元素的值。
工具书类- array.prototype.some()。
- array.prototype.foreach()。
- array.prototype.map()。
- array.prototype.filter()。
- array.prototype.sort()。
- 扩展句法
- array.prototype.find()。
在EcmaScript 2015中,也就是ES6,您可以使用for..of循环来循环一组对象。
1 2 3 | for (let item of items) { console.log(item); // Will display contents of the object inside the array } |
在发布这个答案时,对Internet Explorer的支持是不存在的,但是通过使用像tracer或babel这样的蒸腾器,您可以使用像这样的新JavaScript功能,而不必担心浏览器支持什么。
1 2 3 | for (var j = 0; j < myArray.length; j++){ console.log(myArray[j].x); } |
下面是一个关于如何做到这一点的示例:)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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]) } } |
循环遍历对象数组是非常基本的功能。这就是我的工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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] +""); } } |
用
1 2 3 | for (var j = 0; j < myArray.length; j++){ console.log(myArray[j].x); } |
从ES5+开始,使用foreach方法非常简单。您可以直接更改数组中每个对象的每个属性。
1 2 3 | myArray.forEach(function (arrayElem){ arrayElem = newPropertyValue; }); |
如果要访问每个对象的特定属性:
4这是可行的。循环整个数组(您的rarray)。然后循环遍历每个对象的直接属性(eachobj)。
1 2 3 4 5 6 7 | yourArray.forEach( function (eachObj){ for (var key in eachObj) { if (eachObj.hasOwnProperty(key)){ console.log(key,eachObj[key]); } } }); |
这里是遍历对象数组的另一种方法(您需要在文档中包含这些对象的jquery库)。
1 2 3 | $.each(array, function(element) { // do some operations with each element... }); |
数组对象迭代,使用jquery,(使用第二个参数打印字符串)。
1 2 3 | $.each(array, function(index, item) { console.log(index, item); }); |
接受的答案使用正常功能。所以在foreach上使用arrow函数略微修改后发布相同的代码
1 2 3 4 | yourArray.forEach(arrayItem => { var x = arrayItem.prop1 + 2; console.log(x); }); |
也可以是美元,每个都可以使用箭头函数,如下所示
1 2 3 | $.each(array, (item, index) => { console.log(index, item); }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 | var c = { myProperty: [ { name: 'this' }, { name: 'can' }, { name: 'get' }, { name: 'crazy' } ] }; c.myProperty.forEach(function(myProperty_element) { var x = myProperty_element.name; console.log('the name of the member is : ' + x); }) |
这是我实现它的方法之一。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | const jobs = [ { name:"sipher", family:"sipherplus", job:"Devops" }, { name:"john", family:"Doe", job:"Devops" }, { name:"jim", family:"smith", job:"Devops" } ]; const txt = ` <ul> ${jobs.map(job => ` <li> ${job.name} ${job.family} -> ${job.job} </li> `).join('')} </ul> ` ; document.body.innerHTML = txt; |
小心后面的滴答声(`)