Vreau să ciclu prin obiectele conținute într-o matrice și modifica proprietățile de fiecare. Dacă am face acest lucru:
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j]);
}
Consola ar trebui să aducă fiecare obiect în matrice, nu? Dar, de fapt, se afișează numai primul obiect. daca am consola log matrice în afara buclei, toate obiectele apar deci nu's cu siguranta mai mult acolo.
Oricum, aici's următoarea problemă. Cum pot accesa, de exemplu Object1.x din matrice, folosind bucla?
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j.x]);
}
Acesta întoarce "nedefinit." din Nou consola jurnal în afara buclei mi-a spus că toate obiectele au valori pentru "x". Cum pot accesa aceste proprietăți în buclă?
Mi-a fost recomandat în altă parte pentru a folosi matrice separate pentru fiecare dintre proprietăți, dar vreau să fiu sigur că m-am'am epuizat această cale în primul rând.
Vă mulțumesc!
Folosi forEach sale un built-in funcție de matrice. Matrice.forEach()
:
yourArray.forEach(function (arrayItem) {
var x = arrayItem.prop1 + 2;
console.log(x);
});
Unele cazuri de utilizare de looping printr-o matrice în programare funcțională de drum în 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
});
Notă: Matrice.prototip.forEach() nu este un mod funcțional strict vorbind, ca funcția are ca parametru de intrare nu ar trebui să se întoarcă o valoare, care, astfel, nu poate fi considerată ca o funcție pură.
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]
Notă: harta() metodă creează o nouă matrice cu rezultatele de asteptare un furnizate de funcția pe fiecare element în matrice de asteptare.
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}]
Notă: filter() metodă creează o nouă matrice cu toate elementele care trec testul implementat prin funcția dată.
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);
Matrice.prototip.find() metoda returnează valoarea primului element din matrice care satisface condiția funcția de testare.
În ECMAScript 2015 aka ES6, puteți utiliza un pentru..de buclă la bucla peste o serie de obiecte.
for (let item of items) {
console.log(item); // Will display contents of the object inside the array
}
La momentul de a posta acest raspuns, de sprijin este destul de non-existente pentru Internet Explorer, dar prin utilizarea unei transpiler ca Traceur sau Babel, puteți utiliza caracteristici Javascript ca acest lucru fără a fi nevoie să vă faceți griji despre ceea ce browserele suporta ce.
Aici's un exemplu despre cum puteți face asta :)
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])
}
}
Looping printr-o serie de obiecte este destul de fundamentale funcționalitate. Aceasta este ceea ce funcționează pentru mine.
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>");
}
}
L's foarte simplu folosind forEach metoda de ES5+. Puteți schimba direct fiecare proprietate a fiecărui obiect în matrice.
myArray.forEach(function (arrayElem){
arrayElem = newPropertyValue;
});
Dacă doriți pentru a accesa o anumită proprietate pe fiecare obiect:
myArray.forEach(function (arrayElem){
arrayElem.nameOfYourProperty = newPropertyValue;
});
Acest lucru va funcționa. Looping aprofundată array(yourArray) . Apoi bucla prin direct proprietățile fiecărui obiect (eachObj) .
yourArray.forEach( function (eachObj){
for (var key in eachObj) {
if (eachObj.hasOwnProperty(key)){
console.log(key,eachObj[key]);
}
}
});
Răspunsul acceptat folosește funcția normală. Deci postarea același cod, cu o ușoară modificare, folosind săgeata în funcție pe forEach
yourArray.forEach(arrayItem => {
var x = arrayItem.prop1 + 2;
console.log(x);
});
De asemenea, în $.fiecare puteți utiliza săgeata în funcție de genul de mai jos
$.each(array, (item, index) => {
console.log(index, item);
});
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;
Fii atent cu privire la Căpușe (`)
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);
})
Aceasta este una dintre modalitățile cum am fost în stare să-l realizeze.