programing

angularjs에서 배열 푸시의 중복을 방지하는 방법

megabox 2023. 10. 26. 20:57
반응형

angularjs에서 배열 푸시의 중복을 방지하는 방법

내 코드는 다음과 같습니다.

var arr = [];
arr.push(item1,item2);

그렇게arr다음과 같이 포함됩니다: ["이름", "thing1"]

그러나 정확한 값이 같은 요소를 푸시할 때 문제가 발생했습니다. 동일한 요소 값을 필터링하면서도 업데이트/변경을 수락하는 방법은 무엇입니까?JSFIDDLE

사용가능arr.indexOf찾을 수 없으면 -1을 반환하므로 추가할 수 있습니다.

예.

if (arr.indexOf(item) == -1) {
    arr.push(item);
}

그러나 이전 브라우저에서는 작동하지 않습니다.

JQuery에는 메서드가 있습니다($.indexOf모든 브라우저에서 작동합니다. 아주 오래된 브라우저에서도 작동합니다.

자바스크립트만 있으면 됩니다.

배열에 항목이 포함된 경우 인덱스는 >= 0입니다.

인덱스 == -1이면 배열에 항목이 존재하지 않으므로 고유 항목을 푸시할 수 있습니다.

if(arr.indexOf(item) == -1) {
   arr.push(item);
}

편집: 번호 변경을 요청하셨네요, 이게 방법입니다.

var index = arr.indexOf(item);
if(index > -1) { //checking if item exist in array
  arr[index]++;   // you can access that element by using arr[index], 
                 // then change it as you want, I'm just incrementing in above example
}

대부분의 답변이 지적한 것처럼, 당신은 다음을 사용할 수 있습니다.Array.prototype.indexOf()값이 존재하는지 여부를 확인하는 방법입니다.이를 확인하기 위해서는 문자열의 배열을 확인합니다.ng-models가치 속성,selects.value, 내부에ng-change()이벤트 콜백.

데모

자바스크립트

$scope.goChange = function(name, value){
  if(!~arr.indexOf(value)) {
          arr.push(name, value);
          console.log(arr);
  }
};

HTML

<select ng-model="selects" ng-change="goChange(item.name, selects.value)" ng-options="i as i.value for i in options">
  <option value=""></option>
</select>

Angular Filters를 사용해야 합니다.

일부 구현은 이와 유사한 질문에 대한 답변으로 확인할 수 있습니다.중복된 결과를 ng-repeat 필터로 제거하는 방법

배열에서 중복을 필터링하려면(es6):

let arr = ['foo', 'foo', 'bar', 'baz'];
Array.from(new Set(arr));
console.log(arr);
// ['foo', 'bar', 'baz'];

언급URL : https://stackoverflow.com/questions/25667253/how-to-prevent-duplicate-in-array-push-in-angularjs

반응형