Getting the First Key Of An Object In JavaScript
The simplist way to get the first key of an object is to use just the first part of a for..in:
function getFirstKey(obj) { let key; for (key in obj) { // Add if (obj.hasOwnProperty(key)) {} if inherited properties should not // be counted. break; } return key; } const obj = { property1: 'value1', property2: 'value2', }; console.log(getFirstKey(obj));
Unlike methods which use something like Object.keys(), this does not require iterating through any more keys than the first. Which can be a concern for very large objects.
Github Location https://github.com/Jacob-Friesen/obscurejs/blob/master/2018/getFirstKey.js
13 notes
·
View notes
6.6 객체와 배열을 사용한 데이터 관리
성적 총점과 평균구하기
1.학생데이터 정리. 배열의 push() 메서드를 사용하여 배열에 요소를 대입
//배열생성 var students = []; students.push({이름: '홍길동', 국어: 88, 영어: 89, 수학: 70, 과학: 88}); students.push({이름: '홍말동', 국어: 89, 영어: 84, 수학: 40, 과학: 80}); students.push({이름: '홍정동', 국어: 80, 영어: 69, 수학: 80, 과학: 98}); students.push({이름: '홍송동', 국어: 98, 영어: 99, 수학: 90, 과학: 98}); students.push({이름: '홍겁동', 국어: 68, 영어: 69, 수학: 60, 과학: 68}); students.push({이름: '홍답동', 국어: 78, 영어: 79, 수학: 70, 과학: 78}); students.push({이름: '홍상동', 국어: 98, 영어: 68, 수학: 93, 과학: 99}); students.push({이름: '홍날동', 국어: 84, 영어: 49, 수학: 40, 과학: 48}); students.push({이름: '홍사동', 국어: 83, 영어: 39, 수학: 73, 과학: 38}); students.push({이름: '홍자동', 국어: 85, 영어: 59, 수학: 70, 과학: 100});
2.각각의 객체에 같은 메서드를 모두 직접 입력하는 것은 비효율적이므로 반복문을 사용하게 되면 students안의 모든 객체는 getSum() 메서드와 getAverage() 메서드를 갖게 된다.
//배열생성 /*생략*/ //매서드 추가 for (var i in students) { //총점 students[i].getSum = function () { return this.국어 + this.수학 + this.영어 + this.과학; }; //평균 students[i].getAverage = function () { return this.getSum() / 4; }; }
3. students의 객체 이름, 총점, 평균을 출력. for in 반복문으로 배열 students의 요소에 접근하고 문자열을 만들어 출력한다.
//배열생성 /*생략*/ //매서드 추가 /*생략*/ //출력 var output = '이름\t총점\t평균\n'; for (var i in students) { with (students[i]) { output += 이름 + '\t' + getSum() + '\t' + getAverage() + '\n'; if (students[i] > 300) { output += 이름 + '1'; } } } console.log(output);
0 notes
Objektumok-tulajdonságok elérése és a for … in JavaScript-ben
Objeltumok használata
A JavaScriptben minden objektum, a függvény, a tömbök, a változók, stb… Az objektumot kapcsos zárójelek határolják. JavaScript-ben nem létezik asszociatív tömb, csak indexei lehetnek, viszont objektumokkal kiválthatjuk őket, ugyanis egy objektum tulajdonság-érték párokból áll. Minden tulajdonság után kettőspont, az értékek után pedig vessző áll, ami alól csak az utolsó tulajdonság értéke a kivétel, ahonnan viszont el kell hagynunk a vesszőt. Ha véletlenül benne felejtjük, akkor az IE7 nagy valószínűséggel ki fogja akasztani a weboldalt. Nézzünk is rögtön egy példát, amiben létrehozunk egyet.
var obj = { name: 'Sam', age: 28, sex: 'male' };
Egy objektum tulajdonságának elérése, értékének kikérése az alábbi módokon történhet:
var obj = { name: 'Sam', age: 28, sex: 'male' }; // 1. console.log(obj.name); // 2. console.log(obj[name]); // 3. console.log(obj[0]); // 4. console.log(obj['name']);
Az első verzió egyszerű és rövid. Számomra ez az objektum-tulajdonság elérési mód a legszimpatikusabb.
A második verzióra olyankor lehet szükség, hogyha változóból akarjuk kinyerni egy tulajdonság – másnéven property – nevét. Ilyen eset lehet például, hogyha for…in-nel körbemegyünk egy objektumon.
A harmadik esetben a tuladonság neve olyan mint a tömbben egy index, tehát egy szám. Ezt nem szokás használni objektumoknál, (tömböknél így működik) de ettől függetlenül lehetséges.
A negyedik esetben sztringként adjuk meg a tulajdonság nevét. Ha nem így tennénk, akkor 2. verzióban említett módon egy változót keresne a program, ami csak akkor szerencsés, ha éppen ez a célunk.
Objektum-tulajdonság meglétének vizsgálata
Az alábbi kódban azt vizsgáljuk, hogy egy objektumban az adott tulajdonság létezik-e. A az objektum-tulajdonságnak sztringnek kell lennie a feltételben:
var obj = { name: 'Sam', age: 28, sex: 'male' }; if ('name' in obj) { console.log('A name tulajdonság létezik.'); }
Objektum egyik tulajdonságából a másik tulajdonságának elérése
A this JavaScript kulcsszó egy objektumra mutat, kérdés csak az, hogy melyikre…
var obj = { a: 10, b: function () { console.log(this, this.a + 1); return (this.a + 1); // 10 + 1 }, c: { a: 20, b: function () { console.log(this, this.a + 1); return (this.a + 1); // 20 + 1 } } }; // 1. obj.b(); // 2. obj.c.b();
A fenti példában látható, hogy lérehozunk egy függvényt és azon belül arra használjuk a this kulcsszót, hogy az objektum egy másik tulajdonságát használatba vegyük. A this kulcsszó értéke arra az objektumra mutat, melynek tulajdonságaként a függvény hívása megtörténik.
Példával szemléltetve az első esetben az alapobjektum egy tulajdonságából érünk el this-szel egy máik tulajdonságot.
A második esetben annyi változik, hogy az alapobjektum egy tulajdonságának újra egy objektumot adunk értékül, amin belül az egyik tulajdonságnak szintén van egy függvénye, ami a this kulcsszóval éri el az aktuális objektumnak megfelelő tulajdonságot, ami itt már az alapobjektum "c" tulajdonsága lesz.
Ha egy függvényt nem konstruktorként használunk, a this akkoris egy objektumra fog mutatni, méghozzá az ősobjektumra, a window-ra.
Ha azonban egy függvényt konstruktorként használjuk, a this az "osztály példányára" fog mutatni. Amikor a konstruktor egy publikus függvényébe egy privát láthatóságú függvényt helyezünk és innen próbáljuk elérni az objektumot a this-szel, nem sikerül, mert az a window-ra mutat.
var classFoo = function () { this.num = 10; this.init = function () { console.log(String(this), this.num); // [object Object] 10 (function () { console.log(String(this), this.num); // [object Window] undefined }()); }; }; var oFoo = new classFoo(); oFoo.init();
Annak kiküszöbölésére, hogy a this-t elérjük a privát függvényen belül is, be tudunk vezetni egy segédváltozót mindjárt a konstruktor függvény elején, ami eltárolja a this értékét (jelen esetben: that), így azzal hivatkozhatunk a privát a "példányváltozóra".
var classFoo = function () { var that = this; // eltároljuk a this kulcsszó értékét this.num = 10; this.init = function () { console.log(String(this), this.num); // [object Object] 10 (function () { // this kulcsszóval a változó továbbra sem elérhető console.log(String(this), this.num); // [object Window] undefined // felhasználjuk a this kulcsszó értékét; így már elérhető a "példányváltozó" console.log(String(that), that.num); // [object Object] 10 }()); }; }; var oFoo = new classFoo(); oFoo.init();
Menjünk körbe egy objektumon
Tömbök bejárására ne használjuk a for … in szerkezetet!
Amikor for … in szerkezettel végimegyünk egy objektumon, az örökölni fogja az ős, azaz az Object prototype-ját, ezért azok is elérhetők lesznek az objektumban. Ezekre a tulajdonságra legtöbb esetben nincs szükség, ezért ennek kivédésére a hasOwnProperty tagfüggvényt használhatjuk, amely egy feltételben kiszűri, hogy csak az objektum saját tulajdonságaival dolgozzunk.
var obj = { name: 'Sam', age: 28, sex: 'male' }, prop; // a nem DOM objektumokhoz for (prop in obj) { // csak a saját objektum-tulajdonságokkal foglalkozunk if (obj.hasOwnProperty(prop)) { console.log(obj[prop]); } }
Az IE8 és korábbi verzióiban a DOM objektumok nem öröklik az ős prototípusát, ezért a feltétel mégegy taggal bővül, méghozzá azzal, hogy az objektumban van-e hasOwnProperty tulajdonság; a kódblokk csak akkor fut le, ha mindkét feltétel teljesül.
// a DOM objektumokhoz for (prop in obj) { // csak a saját objektum-tulajdonságokkal foglalkozunk if ('hasOwnProperty' in obj && obj.hasOwnProperty(prop)) { console.log(obj[prop]); } }
Forrás
JavaScript Metaprogramozás
JavaScript függvények
Nicholas C. Zakas – Maintainable Javascript
0 notes
6.3 객체와 반복문
배열은 단순 for 반복문과 for in 반복문으로 요소에 쉽게 접근 할 수 있지만 객체는 for 반복문으로 객체의 속성을 살피는 것은 불가능하다. 객체의 속성을 모두 살피기 위해선 for in 반복문을 사용해야 한다.
//변수선언 var product = { name: 'Microsoft Visual Studio 2012', price: '15,000,000원', langualge: 'Korean', supportOS: 'Win 32/64', subscription: true }; // 출력 var output = ''; for (var key in product) { output += '■' + key + ': ' + product[key] + '\n'; } console.log(output);
for in 반복문에 객체를 넣으면 객체의 요소 개수만큼 반복문을 실행한다.
0 notes
4.5 for in 반복문
자바스크립트는 배열이나 객체를 더욱 쉽게 다룰 수 있게 for in 반복문을 제공한다.
for (var i in array) { }
for in 반복문은 다음과 같은 단순 for 반복문과 같은 기능을 수행한다.
for (var i = 0; i < array.length; i++) { }
for in 반복문의 예제
//변수를 선언 var array = ['포도', '사과', '바나나', '망고']; //반복문 for (var i in array) { alert(array[i]); }
0 notes