Bir JavaScript nesnesini nas─▒l d├Âng├╝ veya numaraland─▒r─▒r─▒m?


Al─▒nan cevaba git


A┼ča─č─▒daki gibi bir JavaScript nesnesi var:

 var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};
 

┼×imdi t├╝m d├Âng├╝ isteyen p unsurlar─▒n ( p1 , p2 , p3 ...) Ve kendi anahtarlar─▒n─▒ ve de─čerlerini almak. Bunu nas─▒l yapabilirim?

Gerekirse JavaScript nesnesini de─či┼čtirebilirim. Nihai hedefim baz─▒ anahtar de─čer ├žiftleri aras─▒nda dola┼čmak ve m├╝mk├╝nse kullanmaktan ka├ž─▒nmak istiyorum eval .


2670









Cevap say─▒s─▒n─▒ say: 30






for-in D├Âng├╝y├╝ ba┼čkalar─▒ taraf─▒ndan g├Âsterildi─či gibi kullanabilirsiniz . Ancak, ald─▒─č─▒n─▒z anahtar─▒n bir nesnenin ger├žek bir ├Âzelli─či oldu─čundan ve prototipten gelmedi─činden de emin olmal─▒s─▒n─▒z.

─░┼čte snippet:

 var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (var key in p) {
    if (p.hasOwnProperty(key)) {
        console.log(key + " -> " + p[key]);
    }
} 


4124







ECMAScript'e 5 alt─▒nda, birle┼čtirebilir Object.keys() ve Array.prototype.forEach() :

 var obj = { first: "John", last: "Doe" };

Object.keys(obj).forEach(function(key) {
    console.log(key, obj[key]);
});
 

ECMAScript 6 ekler for...of :

 for (const key of Object.keys(obj)) {
    console.log(key, obj[key]);
}
 

ECMAScript 8 Object.entries() , as─▒l nesnede her de─čere bakmak zorunda kalmay─▒ engelleyen ekler :

 Object.entries(obj).forEach(
    ([key, value]) => console.log(key, value)
);
 

Birle┼čtirebilir for...of , imha edebilir ve Object.entries ┼čunlar─▒ yapabilirsiniz :

 for (const [key, value] of Object.entries(obj)) {
    console.log(key, value);
}
 

Her ikisi de Object.keys() ve Object.entries() yinelenen ├Âzellikleri bir for...in d├Âng├╝ ile ayn─▒ s─▒rada yineler, ancak prototip zincirini yok sayarlar . Yaln─▒zca nesnenin kendi numaraland─▒r─▒labilir ├Âzellikleri yinelenir.


1005







For-in d├Âng├╝s├╝n├╝ kullanman─▒z gerekir

Ancak bu t├╝r bir d├Âng├╝ kullan─▒rken ├žok dikkatli olun, ├ž├╝nk├╝ bu prototip zinciri boyunca t├╝m ├Âzellikleri ilmek edecektir .

Bu nedenle, for-in d├Âng├╝ler kullan─▒l─▒rken, hasOwnProperty yinelemedeki ge├žerli ├Âzelli─čin ger├žekten kontrol etti─činiz nesnenin bir ├Âzelli─či olup olmad─▒─č─▒n─▒ belirlemek i├žin her zaman y├Ântemi kullan─▒n.

 for (var prop in p) {
    if (!p.hasOwnProperty(prop)) {
        //The current property is not a direct property of p
        continue;
    }
    //Do your logic with the property here
}
 

332







Nesneler aras─▒nda d├Âng├╝ i├žin alternatif y├Ântemlerden bahsetmezsek, soru tamamlanmayacakt─▒r.

G├╝n├╝m├╝zde pek ├žok iyi bilinen JavaScript k├╝t├╝phanesi, koleksiyonlar, yani diziler , nesneler ve dizi benzeri nesneler ├╝zerinde yineleme yapmak i├žin kendi y├Ântemlerini sunmaktad─▒r . Bu y├Ântemler kullan─▒m─▒ uygundur ve t├╝m taray─▒c─▒larla tamamen uyumludur.

  1. JQuery ile ├žal─▒┼č─▒yorsan─▒z , jQuery.each() y├Ântemi kullanabilirsiniz . Hem nesneler hem de diziler ├╝zerinde sorunsuz bir ┼čekilde yineleme yapmak i├žin kullan─▒labilir:

     $.each(obj, function(key, value) {
        console.log(key, value);
    });
     
  2. In Underscore.js E─čer y├Ântemini bulabilirsiniz _.each() bir sa─članan i┼čleve s─▒rayla her verimli, elemanlar─▒n listesi ├╝zerinde dola┼č─▒r, (arg├╝manlar s─▒ras─▒na ├Âdeme dikkat iteratee fonksiyonu!):

     _.each(obj, function(value, key) {
        console.log(key, value);
    });
     
  3. Lo-Dash , nesne ├Âzellikleri ├╝zerinde yineleme yapmak i├žin ├že┼čitli y├Ântemler sunar. Temel _.forEach() (veya di─čer ad─▒ _.each() ), hem nesneler hem de diziler aras─▒nda d├Âng├╝ olu┼čturmak i├žin kullan─▒┼čl─▒d─▒r, ancak (!) length ├ľzelli─čine sahip nesneler, diziler gibi i┼členir ve bu davran─▒┼čtan ka├ž─▒nmak i├žin kullan─▒lmas─▒ _.forIn() ve _.forOwn() y├Ântemlerin kullan─▒lmas─▒ ├Ânerilir (bunlar ayr─▒ca ├Ânce value arg├╝mana sahiptir ):

     _.forIn(obj, function(value, key) {
        console.log(key, value);
    });
     

    _.forIn() ├╝zerinde dola┼č─▒r kendi ve kal─▒tsal bir nesnenin enumerable ├Âzellikleri ise _.forOwn() dola┼č─▒r sadece ├╝zerinde kendi bir nesnenin ├Âzellikleri (temelde kar┼č─▒ kontrol hasOwnProperty fonksiyonu). Basit nesneler ve haz─▒r bilgi nesneleri i├žin bu y├Ântemlerden herhangi biri iyi sonu├ž verecektir.

Genel olarak tarif edilen t├╝m y├Ântemler, tedarik edilen herhangi bir nesne ile ayn─▒ davran─▒┼ča sahiptir. Do─čal kullanman─▒n yan─▒ s─▒ra for..in genellikle olacak d├Âng├╝ daha h─▒zl─▒ gibi herhangi bir soyut daha jQuery.each() , bu y├Ântemler, kullan─▒c─▒ i├žin ├Ânemli ├Âl├ž├╝de daha kolay olan daha az kodlama gerektirir ve daha iyi hata giderme sa─člar.


249







ECMAScript 5'te, de─či┼čmez kelimelerin yineleme alanlar─▒nda yeni bir yakla┼č─▒m─▒n─▒z var. Object.keys

MDN'de daha fazla bilgi g├Ârebilirsinizhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

Se├žimim taray─▒c─▒lar─▒n mevcut s├╝r├╝mlerinde daha h─▒zl─▒ bir ├ž├Âz├╝m olarak a┼ča─č─▒da (Chrome30, IE10, FF25)

 var keys = Object.keys(p),
    len = keys.length,
    i = 0,
    prop,
    value;
while (i < len) {
    prop = keys[i];
    value = p[prop];
    i += 1;
}
 

Bu yakla┼č─▒m─▒n performans─▒n─▒ jsperf.com'daki farkl─▒ uygulamalarla kar┼č─▒la┼čt─▒rabilirsiniz :

Kangax'─▒n uyumluluk tablosunda g├Ârebilece─činiz taray─▒c─▒ deste─čihttp://kangax.github.io/es5-compat-table/%23Object.keys#Object.keys

Eski taray─▒c─▒lar i├žin basit ve tam ├žoklu dolgunuz var

UPD:

Bu sorudaki en pop├╝ler t├╝m durumlar i├žin performans kar┼č─▒la┼čt─▒rmas─▒ perfjs.info :

nesne de─či┼čmez yinelemesi


49







Sadece ┼č├Âyle yineleyebilirsin:

 for (var key in p) {
  alert(p[key]);
}
 

Not key ├Âzelli─čin de─čerine almayaca─č─▒z, sadece bir endeks de─čeri bu.


46







├ľns├Âz:

  • Nesne ├Âzellikleri kendi olabilir (├Âzellik nesnenin kendisindedir) veya miras alabilir (nesnenin kendisinde de─čil, prototiplerinden birinde).
  • Nesne ├Âzellikleri numaraland─▒r─▒labilir veya numaraland─▒r─▒lamaz olabilir . Numaraland─▒r─▒lamayan ├Âzellikler, ├žok say─▒da ├Âzellik numaraland─▒rmas─▒n─▒n / dizisinin d─▒┼č─▒nda b─▒rak─▒l─▒r.
  • ├ľzellik adlar─▒, dizeler veya Simgeler olabilir. ─░simleri Sembol olan m├╝lkler, bir├žok m├╝lk numaraland─▒rmas─▒n─▒n / dizisinin d─▒┼č─▒nda b─▒rak─▒l─▒r.

2018'de, bir nesnenin ├Âzelliklerinde d├Âng├╝ yapma se├ženekleriniz ┼čunlard─▒r (baz─▒ ├Ârnekler listeyi takip eder):

  1. for-in [ MDN , spec ] - Nesnelerin numaraland─▒r─▒labilir ├Âzellikleri aras─▒nda, adlar─▒ dizeleri olan devral─▒nm─▒┼č olanlar dahil olmak ├╝zere dola┼čan bir d├Âng├╝ yap─▒s─▒
  2. Object.keys [ MDN , spek ] - Bir nesnenin isimlerini i├žeren bir dizi sa─člayan bir fonksiyonu , kendi , numaraland─▒r─▒labilir isimleri ┼čeritleri olan ├Âzellikleri.
  3. Object.values [ MDN , spek ] - bir fonksiyon bir dizi sa─člayan de─čerler , bir nesnenin bir kendi , numaraland─▒r─▒labilir ├Âzellikleri.
  4. Object.entries [ MDN , spek ] - adlar─▒n─▒n dizisini sa─člayan bir fonksiyonu ve bir nesnenin de─čerlerine ait , numaraland─▒r─▒labilir ├Âzellikleri (dizideki her bir giri┼č a, [name, value] dizi).
  5. Object.getOwnPropertyNames [ MDN , spec ] - Nesnenin kendi ├Âzelliklerinin (hatta numaraland─▒r─▒lamayanlar─▒n adlar─▒) dizeleri olan adlar─▒n─▒n bir dizisini sa─člayan bir i┼člev .
  6. Object.getOwnPropertySymbols [ MDN , spec ] - Nesnenin kendi ├Âzelliklerinin (hatta numaraland─▒r─▒lamayanlar─▒n) adlar─▒n─▒ Sembol olan adlar─▒n─▒n bir dizisini sa─člayan bir i┼člev .
  7. Reflect.ownKeys [ MDN , spec ] - Nesnenin kendi ├Âzelliklerinin (hatta numaralanamayanlar─▒n bile) adlar─▒n─▒n bir dizisini, bu adlar─▒n dizeler veya Semboller olup olmad─▒─č─▒n─▒ sa─člayan bir i┼člev .
  8. ─░sterseniz t├╝m olmayan enumerable kal─▒tsal olanlar dahil bir nesnenin ├Âzelliklerinin, bir d├Âng├╝ ve kullanmak gerekir Object.getPrototypeOf [ MDN , Spec ] ve kullan─▒m─▒ Object.getOwnPropertyNames , Object.getOwnPropertySymbols ya da Reflect.ownKeys (bu cevab─▒n alt─▒ndaki ├Ârnek) Her prototip zincirinde nesne ├╝zerinde.

Hepsi hari├ž sayesinde for-in , siz (dizi yap─▒s─▒n─▒ d├Âng├╝ ├že┼čit kullanmay─▒ tercih for , for-of , forEach vb.)

├ľrnekler:

for-in :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name in o) {
    const value = o[name];
    console.log(`${name} = ${value}`);
} 

Object.keys (bir for-of d├Âng├╝ ile, ancak herhangi bir d├Âng├╝ yap─▒s─▒n─▒ kullanabilirsiniz) :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Object.keys(o)) {
    const value = o[name];
    console.log(`${name} = ${value}`);
} 

Object.values :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const value of Object.values(o)) {
    console.log(`${value}`);
} 

Object.entries :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const [name, value] of Object.entries(o)) {
    console.log(`${name} = ${value}`);
} 

Object.getOwnPropertyNames :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Object.getOwnPropertyNames(o)) {
    const value = o[name];
    console.log(`${name} = ${value}`);
} 

Object.getOwnPropertySymbols :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Object.getOwnPropertySymbols(o)) {
    const value = o[name];
    console.log(`${String(name)} = ${value}`);
} 

Reflect.ownKeys :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Reflect.ownKeys(o)) {
    const value = o[name];
    console.log(`${String(name)} = ${value}`);
} 

Kal─▒tsal numaraland─▒r─▒lamayanlar dahil t├╝m ├Âzellikler :

 // A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (let depth = 0, current = o; current; ++depth, current = Object.getPrototypeOf(current)) {
    for (const name of Reflect.ownKeys(current)) {
        const value = o[name];
        console.log(`[${depth}] ${String(name)} = ${String(value)}`);
    }
} 
 .as-console-wrapper {
  max-height: 100% !important;
} 


40







Es2015 gittik├že daha pop├╝ler hale geldi─činden, [key, value] ├žiftleri sorunsuz bir ┼čekilde yinelemek i├žin jenerat├Âr ve yineleyici kullan─▒m─▒n─▒ i├žeren bu cevab─▒ g├Ânderiyorum . Di─čer dillerde m├╝mk├╝n oldu─ču gibi, ├Ârne─čin Ruby.

Tamam burada bir kod:

 const MyObject = {
  'a': 'Hello',
  'b': 'it\'s',
  'c': 'me',
  'd': 'you',
  'e': 'looking',
  'f': 'for',
  [Symbol.iterator]: function* () {
    for (const i of Object.keys(this)) {
      yield [i, this[i]];
    }
  }
};

for (const [k, v] of MyObject) {
  console.log(`Here is key ${k} and here is value ${v}`);
}
 

Geli┼čtirici Mozilla sayfas─▒nda bulabilece─činiz bir yineleyici ve jenerat├Âr├╝ nas─▒l yapaca─č─▒n─▒zla ilgili t├╝m bilgiler.

Umar─▒m birine yard─▒m etti.

D├ťZENLE:

ES2017, nesnelerdeki ├žiftler Object.entries ├╝zerinde yinelemeyi [key, value] daha kolay hale getirecek olan─▒ i├žerecektir . Art─▒k ts39 a┼čama bilgisine g├Âre bir standard─▒n par├žas─▒ olaca─č─▒ bilinmektedir .

San─▒r─▒m ┼čimdi oldu─čundan daha da taze olmas─▒ i├žin cevab─▒m─▒ g├╝ncelleme zaman─▒ geldi.

 const MyObject = {
  'a': 'Hello',
  'b': 'it\'s',
  'c': 'me',
  'd': 'you',
  'e': 'looking',
  'f': 'for',
};

for (const [k, v] of Object.entries(MyObject)) {
  console.log(`Here is key ${k} and here is value ${v}`);
}
 

Kullan─▒m hakk─▒nda daha fazla bilgiyi MDN sayfas─▒nda bulabilirsiniz.


26







 for(key in p) {
  alert( p[key] );
}
 

Not: Bunu diziler ├╝zerinden yapabilirsiniz, ancak length di─čer ├Âzellikleri de yinelemelisiniz .


21







Buradaki t├╝m cevaplar─▒ inceledikten sonra, kendi kullan─▒m─▒m i├žin hasOwnProperty gerekli de─čil, ├ž├╝nk├╝ json nesnem temiz; ek javascript i┼člemlerini eklemenin hi├žbir anlam─▒ yoktur. T├╝m kulland─▒─č─▒m bu:

 for (var key in p) {
    console.log(key + ' => ' + p[key]);
    // key is key
    // value is p[key]
}
 

19







ile prototip ile ForEach () atlamak prototip zinciri ├Âzellikleri:

 Object.prototype.each = function(f) {
    var obj = this
    Object.keys(obj).forEach( function(key) { 
        f( key , obj[key] ) 
    });
}


//print all keys and values
var obj = {a:1,b:2,c:3}
obj.each(function(key,value) { console.log(key + " " + value) });
// a 1
// b 2
// c 3
 

19







Bu cevaplardaki insanlar─▒n her ikisine de dokunduklar─▒ Object.keys() ve for...of hi├žbir zaman bir araya getirmedikleri ilgin├žtir :

 var map = {well:'hello', there:'!'};
for (let key of Object.keys(map))
    console.log(key + ':' + map[key]);
 

Sen sadece can for...of bir Object bir yineleyici de─čil ├ž├╝nk├╝ ve for...index ya .forEach() ing Object.keys() ├žirkin / verimsizdir.
─░nsanlar─▒n ├žo─čunun for...in (kontrols├╝z ya da kontrols├╝z .hasOwnProperty() ) ka├ž─▒nd─▒─č─▒ i├žin memnunum, ├ž├╝nk├╝ bu da biraz da─č─▒n─▒k, bu y├╝zden yukar─▒daki cevab─▒mdan ba┼čka, s├Âylemek istedi─čim ...


S─▒radan nesne derneklerini yineleyebilirsin! T─▒pk─▒ davranmak Map fantezi do─črudan kullan─▒m─▒ ile s for...of
DEMO Chrome ve FF ├žal─▒┼čma (─▒ ES6 varsayal─▒m i├žin)

 var ordinaryObject = {well:'hello', there:'!'};
for (let pair of ordinaryObject)
    //key:value
    console.log(pair[0] + ':' + pair[1]);

//or
for (let [key, value] of ordinaryObject)
    console.log(key + ':' + value);
 

Alt─▒mda benim ┼čemsiyemi ekledi─čin s├╝rece:

 //makes all objects iterable just like Maps!!! YAY
//iterates over Object.keys() (which already ignores prototype chain for us)
Object.prototype[Symbol.iterator] = function() {
    var keys = Object.keys(this)[Symbol.iterator]();
    var obj = this;
    var output;
    return {next:function() {
        if (!(output = keys.next()).done)
            output.value = [output.value, obj[output.value]];
        return output;
    }};
};
 

G├╝zel s├Âzdizimsel ┼čekeri olmayan ger├žek bir Map nesnesi olu┼čturmak zorunda kalmadan.

 var trueMap = new Map([['well', 'hello'], ['there', '!']]);
for (let pair of trueMap)
    console.log(pair[0] + ':' + pair[1]);
 

Asl─▒nda, bu y├╝z ifadesiyle, yine de Map'in di─čer i┼člevlerinden (hepsinin i├žine girmeden) faydalanmak istese de, yine de d├╝zg├╝n nesne g├Âsterimini kullanmak istiyorsan─▒z, nesneler ┼čimdi yinelendi─činden, art─▒k sadece bir Harita yapabilirsiniz!

 //shown in demo
var realMap = new Map({well:'hello', there:'!'});
 

Genel olarak alt etmek ya da kar─▒┼čt─▒rmaktan ho┼članmayanlar i├žin prototype , i┼člevi yerine pencerede yapmaktan ├žekinmeyin getObjIterator() ;

 //no prototype manipulation
function getObjIterator(obj) {
    //create a dummy object instead of adding functionality to all objects
    var iterator = new Object();

    //give it what the shim does but as its own local property
    iterator[Symbol.iterator] = function() {
        var keys = Object.keys(obj)[Symbol.iterator]();
        var output;

        return {next:function() {
            if (!(output = keys.next()).done)
                output.value = [output.value, obj[output.value]];
            return output;
        }};
    };

    return iterator;
}
 

┼×imdi bunu s─▒radan bir i┼člev olarak ├ža─č─▒rabilirsiniz, ba┼čka hi├žbir ┼čey etkilenmez

 var realMap = new Map(getObjIterator({well:'hello', there:'!'}))
 

veya

 for (let pair of getObjIterator(ordinaryObject))
 

Bunun i┼če yaramamas─▒na sebep yok.

Gelece─če Ho┼čgeldiniz.


17







Object.keys (obj): Dizi

numaraland─▒r─▒labilir t├╝m (devral─▒nmam─▒┼č) ├Âzelliklerin t├╝m dize de─čerli anahtarlar─▒n─▒ al─▒r.

Bu nedenle, her nesne anahtar─▒n─▒ hasOwnProperty ile test ederek, istedi─činiz anahtar listesini verir. Daha Object.keys( obj ).forEach(function( key ){}) h─▒zl─▒ olmas─▒ gerekenden daha fazla test i┼člemine ihtiyac─▒n─▒z yok . Bunu kan─▒tlayal─▒m:

 var uniqid = function(){
			var text = "",
					i = 0,
					possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
			for( ; i < 32; i++ ) {
					text += possible.charAt( Math.floor( Math.random() * possible.length ) );
			}
			return text;
		}, 
		CYCLES = 100000,
		obj = {}, 
		p1,
		p2,
		p3,
		key;

// Populate object with random properties
Array.apply( null, Array( CYCLES ) ).forEach(function(){
	obj[ uniqid() ] = new Date()
});

// Approach #1
p1 = performance.now();
Object.keys( obj ).forEach(function( key ){
	var waste = obj[ key ];
});

p2 = performance.now();
console.log( "Object.keys approach took " + (p2 - p1) + " milliseconds.");

// Approach #2
for( key in obj ) {
	if ( obj.hasOwnProperty( key ) ) {
		var waste = obj[ key ];
	}
}

p3 = performance.now();
console.log( "for...in/hasOwnProperty approach took " + (p3 - p2) + " milliseconds."); 

Firefox'umda a┼ča─č─▒daki sonu├žlar var

  • Object.keys yakla┼č─▒m─▒ 40.21101451665163 milisaniye ald─▒.
  • i├žin ... in / hasOwnProperty yakla┼č─▒m─▒ 98.26163508463651 milisaniye ald─▒.

PS. Chrome'da fark daha da b├╝y├╝k http://codepen.io/dsheiko/pen/JdrqXa

PS2: ES6'da (EcmaScript 2015) yinelenebilir nesneyi daha iyi yineleyebilirsin:

 let map = new Map().set('a', 1).set('b', 2);
for (let pair of map) {
    console.log(pair);
}

// OR 
let map = new Map([
    [false, 'no'],
    [true,  'yes'],
]);
map.forEach((value, key) => {
    console.log(key, value);
}); 


12







 var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (var key in p) {
    if (p.hasOwnProperty(key)) {
        console.log(key + " = " + p[key]);
    }
} 
 <p>
  Output:<br>
  p1 = values1<br>
  p2 = values2<br>
  p3 = values3
</p> 


12







─░┼čte bir nesneyi yinelemek i├žin ba┼čka bir y├Ântem.

    var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};


Object.keys(p).forEach(key => { console.log(key, p[key]) }) 


11







Object.keys() Y├Ântem, belirli bir nesnenin kendi numaraland─▒r─▒labilir ├Âzelliklerinin bir dizi d├Âner. Burada daha fazla bilgi edininhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

 var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

Object.keys(p).map((key)=> console.log(key + "->" + p[key])) 


8







Ayr─▒ca, Object.keys () i┼člevini kullanabilir ve de─čeri almak i├žin a┼ča─č─▒daki gibi nesne tu┼člar─▒n─▒ yineleyebilirsiniz:

 var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

Object.keys(p).forEach((key)=> {
 console.log(key +' -> '+ p[key]);
}); 


8







T├╝m nesnelere basit bir forEach i┼člevi ekleyebilir , b├Âylece herhangi bir nesneyi otomatik olarak d├Ând├╝rebilirsiniz:

 Object.defineProperty(Object.prototype, 'forEach', {
    value: function (func) {
        for (var key in this) {
            if (!this.hasOwnProperty(key)) {
                // skip loop if the property is from prototype
                continue;
            }
            var value = this[key];
            func(key, value);
        }
    },
    enumerable: false
});
 

"Sevmiyorum bu insanlar i├žin de ... i├žin kullan─▒lan y├Ântem":

 Object.defineProperty(Object.prototype, 'forEach', {
    value: function (func) {
        var arr = Object.keys(this);
        for (var i = 0; i < arr.length; i++) {
            var key = arr[i];
            func(key, this[key]);
        }
    },
    enumerable: false
});
 

┼×imdi, basit bir ├ža─čr─▒ yapabilirsiniz:

 p.forEach (function(key, value){
    console.log ("Key: " + key);
    console.log ("Value: " + value);
});
 

Di─čer forEach-Methods ile ├žak─▒┼čmak istemiyorsan─▒z, benzersiz ad─▒n─▒zla adland─▒rabilirsiniz.


7







Sadece ba─č─▒ml─▒l─▒k olmadan JavaScript kodu:

 var p = {"p1": "value1", "p2": "value2", "p3": "value3"};
keys = Object.keys(p);   // ["p1", "p2", "p3"]

for(i = 0; i < keys.length; i++){
  console.log(keys[i] + "=" + p[keys[i]]);   // p1=value1, p2=value2, p3=value3
}
 

6







Saf JavaScript kullan─▒rken d├Âng├╝ler olduk├ža ilgin├ž olabilir. Sadece ECMA6'n─▒n (Yeni 2015 JavaScript ├Âzelli─či) d├Âng├╝ler kontrol alt─▒na al─▒nd─▒─č─▒ anla┼č─▒l─▒yor. Ne yaz─▒k ki bunu yazarken, hem Taray─▒c─▒lar hem de pop├╝ler Entegre geli┼čtirme ortam─▒ (IDE) hala tamamen yeni zilleri ve ─▒sl─▒klar─▒ desteklemeye ├žal─▒┼č─▒yor.

Bir bak─▒┼čta burada bir JavaScript nesne d├Âng├╝s├╝n├╝n ECMA6'dan ├Ânce nas─▒l g├Âr├╝nd├╝─č├╝ ┼čudur:

 for (var key in object) {
  if (p.hasOwnProperty(key)) {
    var value = object[key];
    console.log(key); // This is the key;
    console.log(value); // This is the value;
  }
}
 

Ayr─▒ca, bunun bu sorunun kapsam─▒ d─▒┼č─▒nda oldu─čunu biliyorum, ancak 2011'de ECMAScript 5.1, forEach sadece eski yinelemeli ve kafa kar─▒┼čt─▒r─▒c─▒ for d├Âng├╝s├╝yle yinelenemeyen nesneleri b─▒rak─▒rken, diziler aras─▒nda d├Âng├╝ olu┼čturmak i├žin temelde yeni ve geli┼čmi┼č bir yol yaratan Diziler i├žin bir y├Ântem ekledi . Ancak garip olan k─▒s─▒m, bu yeni forEach y├Ântemin, break ba┼čka t├╝rl├╝ sorunlara neden olan─▒ desteklememesidir .

Temel olarak 2011'de, bir├žok pop├╝ler k├╝t├╝phanenin (jQuery, Underscore, vb.) Yeniden uygulamaya karar verdiklerinin d─▒┼č─▒nda JavaScript'te dola┼čman─▒n ger├žek bir yolu yoktur.

2015 itibariyle, art─▒k herhangi bir nesne t├╝r├╝n├╝ (Diziler ve Dizeler dahil) d├Âng├╝lemek (ve k─▒rmak) i├žin daha iyi bir yolumuz var. JavaScript'te bir d├Âng├╝ sonunda ├Âneri genel haline geldi─činde neye benzeyecek:

 for (let [key, value] of Object.entries(object)) {
    console.log(key); // This is the key;
    console.log(value); // This is the value;
}
 

Taray─▒c─▒lar─▒n ├žo─čunun 18 Haziran 2016'dan itibaren yukar─▒daki kodu desteklemeyece─čini unutmay─▒n. Chrome'da bile ├žal─▒┼čabilmesi i├žin bu ├Âzel bayra─č─▒ etkinle┼čtirmeniz gerekir: chrome://flags/#enable-javascript-harmony

Bu yeni standart haline gelinceye kadar eski y├Ântem hala kullan─▒labilir, ancak pop├╝ler k├╝t├╝phanelerde alternatifler veya bu k├╝t├╝phaneleri kullanmayanlar i├žin hafif alternatifler de var.


5







     var p =[{"username":"ordermanageadmin","user_id":"2","resource_id":"Magento_Sales::actions"},
{"username":"ordermanageadmin_1","user_id":"3","resource_id":"Magento_Sales::actions"}]
for(var value in p) {
    for (var key in value) {
        if (p.hasOwnProperty(key)) {
            console.log(key + " -> " + p[key]);
        }
    }
} 


5







Herhangi biri ko┼čulu olan arrayObjects arac─▒l─▒─č─▒yla d├Âng├╝ yapmak gerekirse :

 var arrayObjects = [{"building":"A", "status":"good"},{"building":"B","status":"horrible"}];

for (var i=0; i< arrayObjects.length; i++) {
  console.log(arrayObjects[i]);
  
  for(key in arrayObjects[i]) {      
    
      if (key == "status" && arrayObjects[i][key] == "good") {
        
          console.log(key + "->" + arrayObjects[i][key]);
      }else{
          console.log("nothing found");
      }
   }
} 


4







ES6 g├Âz ├Ân├╝ne al─▒nd─▒─č─▒nda, kendi ┼čeker ka┼č─▒─č─▒m─▒ eklemek ve nesnenin ├Âzelliklerini tekrarlamak i├žin bir yakla┼č─▒m daha sunmak istiyorum.

D├╝z JS nesnesi kutudan ├ž─▒kt─▒─č─▒ for..of i├žin yinelenemez oldu─čundan, i├žeri─čini yinelemek i├žin d├Âng├╝ kullanamay─▒z . Fakat kimse onu tekrarlanabilir hale getirmemizi engelleyemez .

Hadi nesnemiz olsun book .

 let book = {
  title: "Amazing book",
  author: "Me",
  pages: 3
}

book[Symbol.iterator] = function(){

  let properties = Object.keys(this); // returns an array with property names
  let counter = 0;
  let isDone = false;

  let next = () => {
    if(counter >= properties.length){
      isDone = true;
    }
    return { done: isDone, value: this[properties[counter++]] }
  }

  return { next };
}
 

Yapt─▒─č─▒m─▒zdan beri bu ┼čekilde kullanabiliriz:

 for(let pValue of book){
  console.log(pValue);
}
------------------------
Amazing book
Me
3
 

Ya da ES6 jenerat├Ârlerinin g├╝c├╝n├╝ biliyorsan─▒z, kesinlikle yukar─▒daki kodlar─▒ ├žok daha k─▒sa hale getirebilirsiniz.

 book[Symbol.iterator] = function *(){

  let properties = Object.keys(this);
  for (let p of properties){
    yield this[p];
  }

}
 

Tabii ki, b├Âyle bir davran─▒┼č─▒ t├╝m seviyelerde Object yinelenebilir hale getirerek uygulayabilirsiniz prototype .

 Object.prototype[Symbol.iterator] = function() {...}
 

Ayr─▒ca, yinelenebilir protokole uyan nesneler, yeni ES2015 ├Âzellik yayma operat├Âr├╝yle birlikte kullan─▒labilir, b├Âylece nesne ├Âzellik de─čerlerini bir dizi olarak okuyabiliriz.

 let pValues = [...book];
console.log(pValues);
-------------------------
["Amazing book", "Me", 3]
 

Veya y─▒k─▒m ├Âdevini kullanabilirsiniz :

 let [title, , pages] = book; // notice that we can just skip unnecessary values
console.log(title);
console.log(pages);
------------------
Amazing book
3
 

JSFiddle'─▒ yukar─▒da verdi─čim t├╝m kodlarla kontrol edebilirsiniz .


4







ES6'da daha ├Ânce baz─▒ i├žsel y├Ântemleri a├ž─▒─ča ├ž─▒karan tan─▒nm─▒┼č sembollere sahibiz, yineleyicilerin bu nesne i├žin nas─▒l ├žal─▒┼čt─▒─č─▒n─▒ tan─▒mlamak i├žin kullanabilirsiniz:

 var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3",
    *[Symbol.iterator]() {
        yield *Object.keys(this);
    }
};

[...p] //["p1", "p2", "p3"]
 

bu es6 d├Âng├╝s├╝nde ... ile ayn─▒ sonucu verecektir.

 for(var key in p) {
    console.log(key);
}
 

Fakat es6'y─▒ ┼čimdi kullanabildi─činiz yetenekleri bilmek ├Ânemlidir!


4







Bunu obj.hasOwnerProperty her for ... in d├Âng├╝ i├žinde kontrol etmekten ├žok yapard─▒m .

 var obj = {a : 1};
for(var key in obj){
    //obj.hasOwnProperty(key) is not needed.
    console.log(key);
}
//then check if anybody has messed the native object. Put this code at the end of the page.
for(var key in Object){
    throw new Error("Please don't extend the native object");
}
 

4







ES06ÔÇÖdan beri bir nesnenin de─čerlerini dizi olarak

 let arrValues = Object.values( yourObject) ;
 

nesne de─čerlerinin bir dizisini d├Ând├╝r├╝r ve Prototip'ten de─čer ├ž─▒karmaz !!

MDN DOCS Object.values ÔÇőÔÇő()

ve anahtarlar i├žin (burada benden ├Ânce yan─▒tlananlar var)

 let arrKeys   = Object.keys(yourObject);
 

4







Ayr─▒ca numaraland─▒r─▒lamayan ├Âzellikler ├╝zerinde yineleme yapmak istiyorsan─▒z, Object.getOwnPropertyNames(obj) do─črudan verilen bir nesnenin ├╝zerinde bulunan t├╝m ├Âzelliklerin (numaraland─▒r─▒labilir veya de─čil) bir dizisini d├Ând├╝rmek i├žin kullanabilirsiniz .

 var obj = Object.create({}, {
  // non-enumerable property
  getFoo: {
    value: function() { return this.foo; },
    enumerable: false
  }
});

obj.foo = 1; // enumerable property

Object.getOwnPropertyNames(obj).forEach(function (name) {
  document.write(name + ': ' + obj[name] + '<br/>');
}); 


3







En yeni ES komut dosyas─▒nda ┼č├Âyle bir ┼čey yapabilirsiniz:

 Object.entries(p);
 

3







Object.entries() fonksiyon:

 var p = {
	    "p1": "value1",
	    "p2": "value2",
	    "p3": "value3"
	};

for (var i in Object.entries(p)){
	var key = Object.entries(p)[i][0];
	var value = Object.entries(p)[i][1];
	console.log('key['+i+']='+key+' '+'value['+i+']='+value);
} 


2


2018-10-24





Angular kullan─▒rken de benzer bir problem ya┼čad─▒m, i┼čte buldu─čum ├ž├Âz├╝m.

Ad─▒m 1. T├╝m nesne tu┼člar─▒n─▒ al─▒n. Object.keys kullanarak. Bu y├Ântem, belirli bir nesnenin kendi numaraland─▒r─▒labilir ├Âzelliklerinin bir dizisini d├Ând├╝r├╝r.

Ad─▒m 2. Bo┼č bir dizi olu┼čturun. Bu, t├╝m ├Âzelliklerin ya┼čayaca─č─▒ bir yerdir, ├ž├╝nk├╝ yeni ngFor halkan─▒z bu diziyi g├Âsterecektir, hepsini yakalamam─▒z gerekir. 3. Ad─▒m. T├╝m tu┼člar─▒ atma i┼člemini tekrarlay─▒n ve her birini olu┼čturdu─čunuz dizinin i├žine itin. ─░┼čte kodda nas─▒l g├Âr├╝nd├╝─č├╝.

     // Evil response in a variable. Here are all my vehicles.
let evilResponse = { 
  "car" : 
    { 
       "color" : "red",
       "model" : "2013"
    },
   "motorcycle": 
    { 
       "color" : "red",
       "model" : "2016"
    },
   "bicycle": 
    { 
       "color" : "red",
       "model" : "2011"
    }
}
// Step 1. Get all the object keys.
let evilResponseProps = Object.keys(evilResponse);
// Step 2. Create an empty array.
let goodResponse = [];
// Step 3. Iterate throw all keys.
for (prop of evilResponseProps) { 
    goodResponse.push(evilResponseProps[prop]);
}
 

Orijinal yay─▒na bir link. https://medium.com/@papaponmx/looping-over-object-properties-with-ngfor-in-angular-869cd7b2ddcc


1



─░lgili yay─▒nlar


Bir JavaScript nesnesini do─čru ┼čekilde klonlayabilir miyim?

Nesneleri d├╝z bir JavaScript nesnesinde nas─▒l ├╝ye olarak d├Âng├╝?

C# 'daki t├╝m enum de─čerleri aras─▒nda d├Âng├╝ nas─▒l yap─▒l─▒r? [├žift]

JavaScript isDOM - Bir JavaScript Nesnesinin DOM Nesnesi olup olmad─▒─č─▒n─▒ nas─▒l kontrol edersiniz?

JQuery dizisinde d├Âng├╝ nas─▒l?

Find taraf─▒ndan d├Ând├╝r├╝len dosya adlar─▒ aras─▒nda nas─▒l dola┼č─▒l─▒r?

Toplu i┼č dosyas─▒nda joker karakterle e┼čle┼čen dosyalar aras─▒nda d├Âng├╝

Bir s─▒n─▒f─▒n t├╝m ├Âzelliklerinde nas─▒l dola┼č─▒l─▒r?

Bir ili┼čkisel dizi aras─▒nda d├Âng├╝ ve anahtar almak nas─▒l? [├žift]

Nesneleri i├žeren bir dizi ile d├Âng├╝ ve ├Âzellikleri eri┼čme

Etiketle ilgili di─čer sorular [javascript]


Nas─▒l java.lang.UnsupportedClassVersionError d├╝zeltmek: Desteklenmeyen major.minor s├╝r├╝m├╝

Oracle'daki t├╝m tablolar─▒n listesini al─▒n?

SQL Server'da DateTime vs DateTime2

Beklenmedik ┼čekilde alt listelerde yans─▒yan liste de─či┼čikliklerinin listesi

Bir uygulama ikili aray├╝z├╝ (ABI) nedir?

Python'da olduk├ža bask─▒ XML

Bir dosyan─▒n boyutunu C cinsinden nas─▒l alabilirim? [├žift]

PostgreSQL'de ÔÇťdatabase_nameÔÇŁ komutunu kullan─▒n

G├Ârev vs Konu farkl─▒l─▒klar─▒ [yinelenen]

Neden bu ├ž─▒plak depoya giremiyorum?