JavaScript: как перебирать свойства объекта и проверять динамическое свойство другого объекта - PullRequest
0 голосов
/ 20 марта 2012

У меня есть объект

var foo = { jon : {age: 'old',   feeling: 'sad' },
            jack: {age: 'young', feeling: 'happy'}
          };

Члены foo создаются динамически;как объект бар .

var bar = { name: 'jon' };

Я бы хотел посмотреть, является ли jon членом foo .Я, должно быть, делаю что-то ужасно неправильное.

function isMember(bar) {
    for(prop in foo) {
        if (foo[prop] === bar.name){
            return true;
            break;
        }
    }
    return false;
};

всегда возвращает истину !!

Ответы [ 3 ]

4 голосов
/ 20 марта 2012

Вот рабочая версия выше:

foo = { jon : {age: 'old',   feeling: 'sad' },
        jack: {age: 'young', feeling: 'happy'}
       };
bar = { name: 'jon' };

function isMember(bar) {
    for(prop in foo) {
        console.log([prop, foo[prop], bar.name, ]);
        if (prop === bar.name){
            return true;
        }
    }
    return false;
 };


console.log(['ismember', isMember(bar)]);

Пример в реальном времени:

Попробуйте изменить bar.name нанапример, jon1, чтобы увидеть, как он себя ведет.Посмотрите на окно консоли, чтобы увидеть, что он выводит, это поможет вам понять, что именно он делает и где вы ошиблись.

Надеюсь, это поможет.

1 голос
/ 20 марта 2012

Это так просто, что вряд ли стоит использовать функцию:

console.log(bar.name in foo);

Живая демонстрация

0 голосов
/ 20 марта 2012

Как только синтаксис прояснен, я думаю, вы ищете встроенный метод hasOwnProperty для объектов.

var foo = {
    "jon": {
        "age": "old",
        "feeling": "sad"
    },
    "jack": {
        "age": "young",
        "feeling": "happy"
    }
};
var bar = {
    "name": "jon"
};
function isMember(prop) {
    return foo.hasOwnProperty(prop);
}
console.log(isMember(bar.name));

Рабочая скрипка на: http://jsfiddle.net/Dwr2M/

...