我想遍历数组中包含的对象并更改每个对象的属性。如果我这样做:
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j]);
}
控制台应该调出阵列中的每个对象,对吧?但实际上它只显示第一个对象。如果我控制台将数组记录在循环外部,那么所有对象都会出现,因此肯定会有更多的对象。
无论如何,这是下一个问题。如何使用循环访问数组中的Object1.x?
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j.x]);
}
返回“undefined”。循环外的控制台日志再次告诉我,对象都具有“x”的值。如何在循环中访问这些属性?
我在其他地方被推荐为每个属性使用单独的数组,但我想确保我已经用尽了这条大道。
谢谢!
答案 0 :(得分:253)
使用forEach是一个内置的数组函数。 Array.forEach()
:
yourArray.forEach(function (arrayItem) {
var x = arrayItem.prop1 + 2;
console.log(x);
});
答案 1 :(得分:32)
在JavaScript中以函数式编程方式循环数组的一些用例:
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()不是一种功能方式,因为它作为输入参数所用的函数不应该返回一个值,因此不能将其视为纯函数。
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
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray= myArray.map(element => element.x);
console.log(newArray); // [100, 200, 300]
注意:map()方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。
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
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]
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}
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray = myArray.filter(element => element.x > 250);
console.log(newArray); // [{x:300}]
注意:filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。
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);
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.find()方法返回数组中第一个满足提供的测试函数的元素的值。
答案 2 :(得分:31)
在ECMAScript 2015又名ES6中,您可以使用for..of loop循环遍历一组对象。
for (let item of items) {
console.log(item); // Will display contents of the object inside the array
}
在发布此答案时,Internet Explorer几乎不存在支持,但通过使用Traceur或Babel等转换程序,您可以使用此类新的Javascript功能,而无需担心浏览器支持哪些内容什么。
答案 3 :(得分:25)
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j].x);
}
答案 4 :(得分:16)
这是一个如何做到这一点的例子:)
getClass.getResource("path")
&#13;
答案 5 :(得分:6)
myArray[j.x]
在逻辑上是不正确的。
使用(myArray[j].x);
代替
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j].x);
}
答案 6 :(得分:6)
循环遍历一组对象是一个非常基本的功能。这对我有用。
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>");
}
}
&#13;
答案 7 :(得分:5)
从ES5 +开始,使用forEach方法非常简单。您可以直接更改数组中每个对象的每个属性。
myArray.forEach(function (arrayElem){
arrayElem = newPropertyValue;
});
如果要访问每个对象上的特定属性:
myArray.forEach(function (arrayElem){
arrayElem.nameOfYourProperty = newPropertyValue;
});
答案 8 :(得分:4)
这样可行。循环彻底的数组(yourArray)。然后循环遍历每个对象的直接属性(eachObj)。
yourArray.forEach( function (eachObj){
for (var key in eachObj) {
if (eachObj.hasOwnProperty(key)){
console.log(key,eachObj[key]);
}
}
});
答案 9 :(得分:4)
这是迭代对象数组的另一种方法(你需要在文档中包含jQuery库)。
$.each(array, function(element) {
// do some operations with each element...
});
答案 10 :(得分:2)
使用jQuery进行数组对象迭代, (使用第二个参数打印字符串)。
$.each(array, function(index, item) {
console.log(index, item);
});
答案 11 :(得分:1)
接受的答案使用正常功能。因此,使用forEach上的箭头功能,稍加修改即可发布相同的代码
yourArray.forEach(arrayItem => {
var x = arrayItem.prop1 + 2;
console.log(x);
});
也可以在$ .each中使用如下箭头功能
$.each(array, (item, index) => {
console.log(index, item);
});
答案 12 :(得分:0)
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;
注意后壁Ti(`)
答案 13 :(得分:0)
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);
})
这是我实现它的方法之一。
答案 14 :(得分:0)
这可能会对某人有所帮助。也许这是Node中的错误。
var arr = [ { name: 'a' }, { name: 'b' }, { name: 'c' } ];
var c = 0;
这不起作用:
while (arr[c].name) { c++; } // TypeError: Cannot read property 'name' of undefined
但这可行...
while (arr[c]) { c++; } // Inside the loop arr[c].name works as expected.
这也可以...
while ((arr[c]) && (arr[c].name)) { c++; }
但是简单地反转顺序不起作用。我猜这里有某种内部优化会破坏Node。
while ((arr[c].name) && (arr[c])) { c++; }
错误说数组未定义,但不是:-/ Node v11.15.0
答案 15 :(得分:0)
for (element in array) {
console.log(array[element].property);
}
这有效。
答案 16 :(得分:0)
this.data = [{name:"Rajiv", city:"Deoria"},{name:"Babbi", city:"Salempr"},{name:"Brijesh", city:"GKP"}];
for(const n of this.data) {
console.log(n.name)
}