가치가 존재하지 않는 경우에만 어레이에 lodash push를 사용합니까?
값이 존재하지 않는 어레이는 추가되지만 값이 있는 경우에는 어레이에서도 값을 삭제하려고 합니다.
Lodash는 이런 일을 할 수 있을 것 같아요.
당신의 베스트 프랙티스 제안에 관심이 있습니다.
또한 Angular.js를 사용하고 있다는 점도 주목할 필요가 있습니다.
* 갱신 *
if (!_.includes(scope.index, val)) {
scope.index.push(val);
} else {
_.remove(scope.index, val);
}
_.union을 사용할 수 있습니다.
_.union(scope.index, [val]);
그Set
ES6에 의해 도입된 기능이 바로 그 역할을 합니다.
var s = new Set();
// Adding alues
s.add('hello');
s.add('world');
s.add('hello'); // already exists
// Removing values
s.delete('world');
var array = Array.from(s);
또는 일반 어레이를 계속 사용하고 싶은 경우
function add(array, value) {
if (array.indexOf(value) === -1) {
array.push(value);
}
}
function remove(array, value) {
var index = array.indexOf(value);
if (index !== -1) {
array.splice(index, 1);
}
}
Lodash보다 vanilla JS를 사용하는 것이 좋습니다.종속성이 제거되고 코드를 이해해야 하며 성능이 향상되는 경우가 많습니다.
_.pull()이 도움이 될 수 있습니다.
var _ = require('lodash');
function knock(arr,val){
if(arr.length === _.pull(arr,val).length){
arr.push(val);
}
return arr;
}
기존 어레이를 뮤트하고 중복도 제거합니다.
> var arr = [1,2,3,4,4,5];
> knock(arr,4);
[ 1, 2, 3, 5 ]
> knock(arr,6);
[ 1, 2, 3, 5, 6 ]
> knock(arr,6);
[ 1, 2, 3, 5 ]
사용하다includes
항목이 배열에 존재하는지 확인하는 함수 및remove
기존 항목을 삭제합니다.
function addOrRemove(arr, val) {
if (!_.includes(arr, val)) {
arr.push(val);
} else {
_.remove(arr, item => item === val);
}
console.log(arr);
}
var arr = [1, 2, 3];
addOrRemove(arr, 1); // arr = [2, 3]
addOrRemove(arr, 4); // arr = [2, 3, 4]
addOrRemove(arr, 2); // arr = [3, 4]
<script src="https://raw.githubusercontent.com/lodash/lodash/4.11.2/dist/lodash.min.js"></script>
이 경우 를 사용할 수 있습니다.concat
'를 밀다uniq
고유한 값을 검증하려면:
예:
var ar = [1, 2, 3, 1, 5, 2, 4]
ar = _.uniq(_.concat(ar, 9))
//[1, 2, 3, 5, 4, 9]
예: https://codepen.io/dieterich/pen/xeZNJY
참조: https://lodash.com/docs/4.17.11#uniq
이 라이너 하나로 충분할 거야.삽입할 요소가 존재하지 않으면 요소를 삽입하고 결과 배열의 길이를 반환합니다.요소가 배열에 존재하는 경우 요소를 삭제하고 삭제된 요소를 별도의 배열로 반환합니다.
var arr = [1,2,3,4,5],
aod = (a,e,i=0) => !!~(i = a.indexOf(e)) ? a.splice(i,1) : a.push(e);
document.write("<pre>" + JSON.stringify(aod(arr,6)) + JSON.stringify(arr) + "</pre>");
document.write("<pre>" + JSON.stringify(aod(arr,6)) + JSON.stringify(arr) + "</pre>");
사실 푸시는 결과 배열 길이 값을 반환하기 때문에 대부분의 경우 사용되지 않습니다.그 결과 반환되는 어레이에 대한 참조가 있으면 함수 체인을 할 수 있습니다.따라서 이를 달성하기 위한 간단한 방법은 다음과 같습니다.
var arr = [1,2,3,4,5],
aod = (a,e,i=0) => !!~(i = a.indexOf(e)) ? a.splice(i,1) : (a.push(e),a);
document.write("<pre>" + JSON.stringify(aod(arr,6)) + JSON.stringify(arr) + "</pre>");
document.write("<pre>" + JSON.stringify(aod(arr,6)) + JSON.stringify(arr) + "</pre>");
이제 이것은 합리적으로 연결된다.
IE를 지원할 필요가 없거나 폴리필을 사용하는 경우 Array.protype.includes()를 사용할 수 있습니다.
const addUniq = (array, value) => array.includes(value)
? array.length
: array.push(value);
가장 간단한 방법은 _.isEmpty 및 _.remove Lodash 함수를 사용하는 것입니다.
if (_.isEmpty(_.remove(array, value)) {
array.push(value);
}
제거 후 함수는 제거된 값 또는 빈 배열이 반환되며 빈 배열이 반환되면 새 값이 추가됩니다.
오래된 질문이지만 XOR Lodash xor를 찾고 있습니다.
이 값이 아직 존재하지 않으면 값이 추가되고 그렇지 않으면 제거됩니다.사용 사례 전환에 최적.
언급URL : https://stackoverflow.com/questions/37073774/using-lodash-push-to-an-array-only-if-value-doesnt-exist
'source' 카테고리의 다른 글
ReferenceError getValuesOf자동 채우기 입력, 변수를 찾을 수 없습니다.지불자동 채우기 구성 (0) | 2023.03.25 |
---|---|
대응 16 경고 "warning.js:36 경고: 서버 HTML에 다음이 포함될 것으로 예상하지 않았습니다.대응 16 경고 "warning.js:36 경고: 서버 HTML에 다음이 포함될 것으로 예상하지 않았습니다.에에." (0) | 2023.03.25 |
MUI에서 원색 및 보조 색상 변경 (0) | 2023.03.25 |
ng-options를 사용하여 값 내의 변수 유형을 억제하려면 어떻게 해야 합니까? (0) | 2023.03.25 |
페이지를 새로고침하면 AngularJS HTML5 모드에서 잘못된 GET 요구가 발생한다. (0) | 2023.03.25 |