2012-07-10 5 views
-1

다른 속성 (SQL에서) 예를 들어자바 스크립트 객체 속성

의 값에서 하나의 객체 속성을 얻을 수있는 방법이 ID 객체 에서object.name = "somename"GET 있습니까?

개체의 ID를 가져올 필요가 있지만 이름 만 알고 있습니다.

이 기능을 사용할 수
+0

목록에있는 개체입니까? – davids

+0

그 개체가 목록에 있습니까? – david

+2

^확률이란 무엇입니까? – Daedalus

답변

2

내가 당신을 가정 할 것이다 것은 노력하고있다 객체의 배열로이를 수행하는 것은 그렇지 않다는 이유에서입니다.

원하는 브라우저 지원에 따라 이라는 메서드가 Array.prototype에 있습니다. 필요하다면 너무 심을 수 있습니다. 여기

var list = ​[ 
    {id:1, name:'bob'}, 
    {id:2, name:'jim'}, 
    {id:3, name:'sam'}, 
    {id:4, name:'tim'} 
]; 

var sams = list.filter(function(obj){ 
    return obj.name == 'sam'; 
}); 

console.log(sams[0].id); 

가 jsfiddle 링크입니다 :

코드는 다음과 같이 뭔가를 찾고 끝낼 것 http://jsfiddle.net/g8rTA/

+0

배열을 통해 필터링하려고한다는 것이 명확하지 않았던 것 같습니다. 도움을 주셔서 감사합니다 –

+0

+1'필터'접근 방식과 그 언급은 어디서나 지원되지 않습니다 :) – Jashwant

0

그것을 얻을 수 있습니다 :

function getObjectByAttribute(list, attr, val){ 
    var result = null; 
    $.each(list, function(index, item){ 
     if(item[attr].toString() == val.toString()){ 
      result = item; 
      return false; 
     } 
    }); 
    return result; 
} 

var obj = getObjectByAttribute(yourList, 'name', 'somename'); 
if(obj) console.log(obj.id); 

편집 :

@nnnnnn가 제안한 것처럼, 비 jQuery를 대체 :

function getObjectByAttribut(list, attr, val){ 
    var result = null; 
    for(var ind in list){ 
     if(list[ind][attr] == val) return list[ind]; 
    } 
    return null; 
} 
+0

jQuery없이 jQuery를 사용하지 않고'$ .each() 대신 일반 for 루프를 사용하십시오.)'. 'result' 변수가 필요 없다고 제안 할 수 있습니까? 발견되면'item'을 직접 반환하고, 발견되지 않으면'null'을 직접 반환합니다 (또는 발견되지 않은 값으로'undefined'를 사용하고 마지막으로'return' 문도 필요 없습니다). – nnnnnn

+0

그래, 네 말이 맞아, 내가 그걸 고려해야 했어. false를 반환하는 것과 관련하여 jQuery에서 false가 아닌 값을 반환하면 각 루프가 false 루프에서 continue 문과 같이 작동하고 false를 반환하면 루프가 손상됩니다. – davids

+0

사과드립니다. 내 마음 속에는 이미 비 jQuery 버전으로 뛰어 올랐지 만'$ .each() '와 함께 물론 당신이 말한 것처럼'result'가 필요하다. – nnnnnn

0

귀하의 질문은 나에게 분명하지 않다, 그러나 나는이 라인에 대답하고있다.

다른 속성의 값에서 하나의 개체 속성을 가져 오는 방법이 있습니까?

var obj = { 
    'name' : 'ramesh', 
    'surname' : 'suresh' 
} 

var obj2 = { 
    'props' : 'name', 
    'method' : 'blah' 
} 


for(var i in obj){ 
    if(obj.hasOwnProperty(i)){ 
     if(i === obj2['props']){ 
     console.log('Found ' + i); // This will find 'name' 
     break; 
     } 

    } 
} 
+0

덧글없이 1에서 -1 더 : :) – Jashwant

+0

그것은 내 의견입니다, 당신은 미쳤군요. – david

+0

;) 하하. 나는 ur 코멘트를 좋아했다. 그러나 진지하게, 나는 더 좋은 설명을 원했다. 이것은 누군가를 비웃을 장소가 아닙니다. 실수를 지적하여 배울 수 있습니다. – Jashwant