Angular에서 개체 비교
Angular에서 두 개체를 "심층"비교하는 것이 가능합니까? 내가하고 싶은 것은 각 키 / 값 쌍을 비교하는 것입니다. 예를 들면 :
개체 1
{
key1: "value1",
key2: "value2",
key3: "value3"
}
개체 2
{
key1: "value1",
key2: "newvalue",
key3: "value3"
}
내가 필요한 것은 키 / 값 쌍 중 하나만 다르기 때문에 비교가 실패하는 것입니다. 즉, 모든 키 / 값 쌍이 정확히 일치해야하며 그렇지 않으면 실패합니다. 이것은 이미 Angular에 내장되어 있습니까? 정말로 필요하다면 나만의 서비스를 작성할 수 있다고 확신하지만, 이미 내장되어 있기를 바랐습니다. angular.equals와 비슷합니다.
두 개체를 비교하려면 다음을 사용할 수 있습니다.
angular.equals(obj1, obj2)
심층 비교를 수행하며 키 순서에 의존하지 않습니다. AngularJS DOCS 및 약간의 데모를 참조하십시오.
var obj1 = {
key1: "value1",
key2: "value2",
key3: {a: "aa", b: "bb"}
}
var obj2 = {
key2: "value2",
key1: "value1",
key3: {a: "aa", b: "bb"}
}
angular.equals(obj1, obj2) //<--- would return true
순서가 두 객체 모두에서 동일하다고 가정 stringify
하고 둘 다 비교하십시오!
JSON.stringify(obj1) == JSON.stringify(obj2);
이 스레드에서 조금 늦었습니다. angular.equals는 심층 검사를 수행하지만 멤버 중 하나가 접두사에 "$"를 포함하면 왜 다르게 동작하는지 아는 사람이 있습니까?
다음 입력 으로이 데모 를 시도 할 수 있습니다.
var obj3 = {}
obj3.a= "b";
obj3.b={};
obj3.b.$c =true;
var obj4 = {}
obj4.a= "b";
obj4.b={};
obj4.b.$c =true;
angular.equals(obj3,obj4);
나는 그것이 다소 늦은 대답이라는 것을 알고 있지만 이것의 원인으로 약 30 분의 디버깅을 잃었습니다. 누군가 시간을 절약 할 수 있습니다.
angular.equals()
속성 obj.$something
(속성 이름이 $로 시작)이 있는 개체에 사용하면 해당 속성이 비교시 무시됩니다.
예:
var obj1 = {
$key0: "A",
key1: "value1",
key2: "value2",
key3: {a: "aa", b: "bb"}
}
var obj2 = {
$key0: "B"
key2: "value2",
key1: "value1",
key3: {a: "aa", b: "bb"}
}
angular.equals(obj1, obj2) //<--- would return TRUE (despite it's not true)
참고 URL : https://stackoverflow.com/questions/20409712/compare-objects-in-angular
'developer tip' 카테고리의 다른 글
Sql 쿼리를 통해 Sqlite에서 테이블의 첫 번째 / 맨 위 행을 얻는 방법 (0) | 2020.10.12 |
---|---|
Guice의 AssistedInject를 사용하는 방법? (0) | 2020.10.12 |
jQuery datepicker 연도 표시 (0) | 2020.10.11 |
그래프에서 뚜렷하게 다른 RGB 색상 생성 (0) | 2020.10.11 |
버튼의 PNG 색상 변경-iOS (0) | 2020.10.11 |