javascript 검색 - 객체 배열에서 일치하는 객체 찾기?



속성 함수 (4)

jquery에서 map 함수를 사용했고 검색된 키 값을 전달하여 선택된 인덱스를 얻고 있습니다.이 인덱스를 사용하여 배열에서 필요한 객체를 가져옵니다.

var mydata = [{ name: "Ram", Id: 1 }, { name: "Shyam", Id: 2 }, { name: "Akhil", Id: 3 }];

searchKey = 2

var mydata = [{ name: "Ram", Id: 1 }, { name: "Shyam", Id: 2 }, { name: "Akhil", Id: 3 }];

searchKey = 2

var selectedData = mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey)];

console.log(selectedData)

var selectedData = mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey)];

console.log(selectedData)

output
{ name: "Shyam", Id: 2 }

Note: if you want to pass search key as object then
searchKey = { Id: 2 };

mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey.Id)];

output
{ name: "Shyam", Id: 2 }
var set = [{"color":"blue"},{"color":"green"},{"color":"red"},{"color":"green"}];

나는 db 호출, set.find({"color":"green"}) 과 같은 것을 할 수 있고 그 속성을 포함하는 객체들로 가득 찬 배열을 반환하게하고 싶습니다.


jQuery 태그가 포함되었으므로 jQuery의지 map 사용하여이를 수행하는 한 가지 방법이있다.

var results = $.map( set, function(e,i){
  if( e.color === 'green' ) return e; 
});

배열에서 요소를 제거하기 위해 null 을 반환해야하지만, 주석에 jsFiddle로 표시된 것처럼 이것은 분명히 false입니다. 아무 것도 반환하지 않습니다 (즉, undefined 반환).


Array#filter 사용하여,이 특별한 경우 코드는 다음과 같습니다.

var results = set.filter(function (entry) { return entry.color === "green"; });

일부 구형 브라우저에서는 Array#filter 가 구현되어 있지 않으므로 링크 된 문서에서 이전 버전과의 호환성을 확인하거나 더 나은 ES5 shim을 얻는 것이 좋습니다.

좀 더 일반적인 경우에는 아이디어를 확장하는 것입니다.

function findByMatchingProperties(set, properties) {
    return set.filter(function (entry) {
        return Object.keys(properties).every(function (key) {
            return entry[key] === properties[key];
        });
    });
}

var results = findByMatchingProperties(set, { color: "green" });

다시, 나는 ECMAScript 5 메서드 Object.keysArray#every 사용하므로 ES5 shim을 사용하십시오. (이 코드는 ES5 shim없이 수행 할 수 있지만 수동 루프를 사용하며 쓰기 및 읽기가 훨씬 쉽지 않습니다.)


ECMAScript 2018에서

let objClone = { ...obj };

주의하십시오 중첩 된 객체가 여전히 복사됩니다 참고로.





javascript