Я блуждаю, если это возможно ниже:
var layers = {};
layers.group3 = new L.MarkerClusterGroup(); //some group of objects
layers.group3.name = "somestr"; //here i want to give a property name to group3 object.
function checkLayers(data, t) {
for (var name in layers) {
var value = layers[name];
alert("name: "+name+ " value: "+value);
if(layers.group3.name == t){
//do something
}
}
}
Как я могу получить доступ к свойству name для group3. Он не отображается в предупреждении. И я также хочу сравнить значение с параметром "t".
Если вы хотите получить свойство name
через итерацию, вы должны проверить, является ли имя свойства для итерации group3
. Как только вы убедитесь, что у вас есть свойство group3
вы можете получить доступ к свойству name. Цикл for...in
будет перебирать все свойства объекта, при использовании in layers
он выполняет итерацию по всем свойствам layers
, так как group3
является свойством на layers
вы не можете получить доступ к свойству group3.name
, просто перебирая свойства в layers
.
for (var name in layers) {
if(name == "group3" && layers[name].name = t){
delete layers[name];
}
}
Это можно сделать намного проще без итерации:
alert(layers.group3.name);
Я изменил ваш код. Он отлично работает:
var layers = {};
layers.group3 = {};
layers.group3.name = "somestr"; //here i want to give a property name to group3 object.
function checkLayers(data, t) {
for (var name in layers) {
var value = layers[name];
console.log("name: ", name , " value: " , value);
if(layers.group3.name == t){
console.log(layers.group3.name);
}
}
}
checkLayers('', 'somestr');
Результаты в консоли:
name: group3 value: Object {name: "somestr"}
somestr
for (var name in layers)
только перебирает свойстваlayers
. Ваше свойствоname
является свойством объектаgroup3
, а не свойствомlayers
.