배열이 있습니다.
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]
배열의 구조를 변경할 수 없습니다. id가 전달되고 배열에서 해당 객체 45
를 얻고 싶습니다 'bar'
.
JavaScript 또는 jQuery를 사용하여이 작업을 어떻게 수행합니까?
답변
find()
방법을 사용하십시오 :
myArray.find(x => x.id === '45').foo;
에서 MDN :
find()
있어서, 상기 어레이의 제 1 값을 반환 배열에 만족하는 요소가 제공하는 기능을 테스트하는 경우. 그렇지 않으면undefined
반환됩니다.
대신 인덱스 를 찾으려면 다음을 사용하십시오 findIndex()
.
myArray.findIndex(x => x.id === '45');
에서 MDN :
이
findIndex()
메소드는 제공된 테스트 기능을 만족하는 배열에서 첫 번째 요소의 색인을 리턴합니다. 그렇지 않으면 -1이 반환됩니다.
일치하는 요소의 배열을 얻으려면 filter()
대신 메소드를 사용하십시오 .
myArray.filter(x => x.id === '45');
이것은 객체의 배열을 반환합니다. foo
속성 배열을 얻으려면 다음 map()
방법 으로이 작업을 수행 할 수 있습니다 .
myArray.filter(x => x.id === '45').map(x => x.foo);
참고 사항 : find()
또는 filter()
과 같은 메소드 및 화살표 기능 은 IE와 같은 구형 브라우저에서 지원되지 않으므로 이러한 브라우저를 지원하려면 Babel ( polyfill 포함 )을 사용하여 코드를 변환해야합니다 .
답변
이미 jQuery를 사용하고 있으므로 배열을 검색하기위한 grep 함수를 사용할 수 있습니다 .
var result = $.grep(myArray, function(e){ return e.id == id; });
결과는 찾은 항목이있는 배열입니다. 객체가 항상 존재하고 한 번만 발생한다는 것을 알고 있으면 result[0].foo
값을 얻는 데 사용할 수 있습니다 . 그렇지 않으면 결과 배열의 길이를 확인해야합니다. 예:
if (result.length === 0) {
// no result found
} else if (result.length === 1) {
// property found, access the foo property using result[0].foo
} else {
// multiple items found
}
답변
또 다른 해결책은 조회 오브젝트를 작성하는 것입니다.
var lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
lookup[array[i].id] = array[i];
}
... now you can use lookup[id]...
많은 조회를 수행해야하는 경우 특히 흥미 롭습니다.
ID와 객체가 공유되므로 더 많은 메모리가 필요하지 않습니다.
답변
ECMAScript 2015 는 배열 에서 find () 메소드를 제공합니다.
var myArray = [
{id:1, name:"bob"},
{id:2, name:"dan"},
{id:3, name:"barb"},
]
// grab the Array item which matchs the id "2"
var item = myArray.find(item => item.id === 2);
// print
console.log(item.name);
외부 라이브러리없이 작동합니다. 그러나 이전 브라우저 지원 을 원할 경우이 polyfill 을 포함시킬 수 있습니다 .
답변
Underscore.js 에는 다음과 같은 좋은 방법이 있습니다.
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'},etc.]
obj = _.find(myArray, function(obj) { return obj.id == '45' })
답변
가장 쉬운 방법은 다음과 같지만 Internet Explorer 8 (또는 그 이전 버전)에서는 작동하지 않습니다.
var result = myArray.filter(function(v) {
return v.id === '45'; // Filter out the appropriate one
})[0].foo; // Get result and access the foo property
답변
다음을 시도하십시오
function findById(source, id) {
for (var i = 0; i < source.length; i++) {
if (source[i].id === id) {
return source[i];
}
}
throw "Couldn't find object with id: " + id;
}