2016-01-26 2 views
2

Я не хотел использовать jQuery, если это возможно. То, что я ищу:Как бы получить значение свойства, зная значение другого свойства в объекте?

var obj = [ 
    { 
    name: "Sam", 
    Job: "Developer" 
    }, 
    { 
    name: "Mike", 
    Job: "Brother" 
    } 
]; 

var testing = obj[name == sam].job // testing equals "Developer" 
+0

Почему бы вам не сделать 'obj' объект вместо массива, а также использовать' name' как ключ? – Barmar

ответ

2

Вы ищете Array.filter:

var obj = [ 
{ 
    name: "Sam", 
    Job: "Developer" 
}, 
{ 
    name: "Mike", 
    Job: "Brother" 
} 
]  
var testing = obj 
    .filter(function(person) { 
    return person.name == 'Sam' 
    }).map(function(person) { 
    return person.Job 
    }) 

console.log (тестирование)

или, если вы знаете, что вы заинтересованы в первой :

var obj = [ 
{ 
    name: "Sam", 
    Job: "Developer" 
}, 
{ 
    name: "Mike", 
    Job: "Brother" 
} 
]  
var testing = obj 
    .filter(function(person) { 
    return person.name == 'Sam' 
    }) var obj = [ 
{ 
    name: "Sam", 
    Job: "Developer" 
}, 
{ 
    name: "Mike", 
    Job: "Brother" 
} 
]  
var testing = obj 
    .filter(function(person) { 
    return person.name == 'Sam' 
    }) 
console.log(testing[0] && testing[0].Job) 

и последнее, но не менее важное: Если вы знаете, у вас есть ровно один матч, вы можете просто сделать:

var testing = obj.filter(function(p) { return p.name == 'Sam'; })[0].Job 
1

сделать сравнение для ключа объекта отдельно от присвоения значения, как это:

var people = [ 
    { 
    name: "Sam", 
    Job: "Developer" 
    }, 
    { 
    name: "Mike", 
    Job: "Brother" 
    } 
]; 

var testing = null; 
for (var person in people) { 
    if (people[person].name === 'Sam') { testing = people[person].job; } 
} 
2

Таким образом, вы не можете сделать это так же просто, как вы написали, но вы можете фильтровать и найти что вы ищете. Я сделал это обобщенную функцию, чтобы сделать жизнь проще для повторного использования:

function getArrObjPropertyValue(arr, searchProperty, searchCompare, returnProperty) { 
    return arr.filter(function(item) { 
    return item[searchProperty] === searchCompare; 
    })[0][returnProperty]; 
} 

console.log(getArrObjPropertyValue(obj, 'name', 'Sam', 'Job')); // Developer