>  기사  >  웹 프론트엔드  >  JavaScript 객체에 `filter()` 메서드를 어떻게 구현할 수 있나요?

JavaScript 객체에 `filter()` 메서드를 어떻게 구현할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-20 03:26:01676검색

How can you implement a `filter()` method for JavaScript objects?

JavaScript: 객체에 대한 filter() 구현

JavaScript는 배열 유형에 대한 filter() 프로토타입을 제공하지만 객체에는 이 기능이 없습니다. 유형. 이러한 제한 사항을 해결하기 위해 객체에 대해 특별히 filter() 구현을 생성하는 방법을 살펴보겠습니다.

구현:

Object.prototype.filter = function(predicate) {
  var result = {};

  for (key in this) {
    if (this.hasOwnProperty(key) && !predicate(this[key])) {
      result[key] = this[key];
    }
  }

  return result;
};

이 구현은 독립적으로 작동하는 반면, jQuery 1.5 및 jQuery UI 1.8.9를 사용하는 사이트에 추가하면 JavaScript 오류가 발생할 수 있습니다.

대체 솔루션:

객체 프로토타입을 수정하는 대신 다음을 고려하세요. 유틸리티 기능:

1. 축소 및 Object.keys 사용:

Object.filter = (obj, predicate) => 
  Object.keys(obj)
        .filter(key => predicate(obj[key]))
        .reduce((res, key) => (res[key] = obj[key], res), {});

2. 맵 및 스프레드 구문 사용:

Object.filter = (obj, predicate) => 
  Object.entries(obj)
        .filter(([key, value]) => predicate(value))
        .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});

3. Object.entries 및 Object.fromEntries 사용:

Object.filter = (obj, predicate) => 
  Object.fromEntries(
    Object.entries(obj).filter(([key, value]) => predicate(value))
  );

사용 예:

var scores = {
  John: 2,
  Sarah: 3,
  Janet: 1
};
var filtered = Object.filter(scores, score => score > 1); 
console.log(filtered);

이러한 대체 솔루션은 원본 개체를 유지하면서 개체 속성을 필터링합니다.

위 내용은 JavaScript 객체에 `filter()` 메서드를 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.