자바스크립트에서 배열 길이를 제한할 수 있습니까?
제품 브라우징 이력을 표시하고 싶어서 브라우저 쿠키에 제품 ID를 저장하고 있습니다.
히스토리 목록이 5개로 한정되어 있기 때문에 쿠키 값을 배열로 변환한 후 길이를 확인하고 중복을 자릅니다.
아래 코드는 제가 시도한 것인데 작동이 안 되고 배열 항목이 제거되지 않습니다.
5개만 저장할 수 있도록 배열 길이를 제한하는 방법을 묻고 싶습니다.
아니면
배열 인덱스 4 다음에 아이템을 자를려면 어떻게 해야 합니까?
var id = product_id;
var browseHistory = $.cookie('history');
if (browseHistory != null) {
var old_cookie = $.cookie('history');
var new_cookie = '';
if (old_cookie.indexOf(',') != -1) {
var arr = old_cookie.split(',');
if (arr.length >= 5) {
arr.splice(4, 1)
}
}
new_cookie = id + ',' + old_cookie;
$.cookie('history', new_cookie, { expires: 7, path: '/' });
} else {
$.cookie('history', id, { expires: 7, path: '/' });
}
스플라이스를 올바르게 사용하고 있지 않습니다.
arr.splice(4, 1)
이것은 인덱스 4에서 1개의 아이템을 제거합니다. 여기를 보세요.
슬라이스를 사용하고 싶은 것 같습니다.
arr.slice(0,5)
이는 요소를 0~4 위치로 되돌립니다.
나머지 코드(쿠키 등)는 모두 올바르게 작동한다고 가정합니다.
가장 빠르고 간단한 방법은.length
원하는 길이의 속성:
arr.length = 4;
이는 배열을 재설정/비우기 위한 바람직한 방법이기도 합니다.
arr.length = 0;
주의 사항: 이 속성을 설정하면 배열의 길이가 2인 경우 실행 중인 것보다 길 수도 있습니다.arr.length = 4
2개를 더합니다.undefined
그것에 대한 항목들.조건을 추가할 수 있습니다.
if (arr.length > 4) arr.length = 4;
또는:
arr.length = Math.min(arr.length, 4);
arr.length = Math.min(arr.length, 5)
var arrLength = arr.length;
if(arrLength > maxNumber){
arr.splice( 0, arrLength - maxNumber);
}
이 솔루션은 다음과 같은 동적 환경에서 더 효과적으로 작동합니다.p5js
. 이것을 드로우콜 안에 넣었더니 배열의 길이를 동적으로 조입니다.
문제는.
arr.slice(0,5)
즉, 드로 프레임당 배열에서 고정된 개수의 항목만 제거하므로 사용자가 여러 항목을 추가할 수 있는 경우 배열 크기를 일정하게 유지할 수 없습니다.
문제는.
if (arr.length > 4) arr.length = 4;
배열의 끝에서 항목을 제거하기 때문에 다음과 같이 끝에 추가할 경우 배열을 순환하지 않습니다.push()
.
당신은 그냥 할 수 있다고 생각합니다.
let array = [];
array.length = 2;
Object.defineProperty(array, 'length', {writable:false});
array[0] = 1 // [1, undefined]
array[1] = 2 // [1, 2]
array[2] = 3 // [1, 2] -> doesn't add anything and fails silently
array.push("something"); //but this throws an Uncaught TypeError
아무도 배열 길이를 제한하기 위해 다음 토막글을 언급하지 않아 놀랐습니다.
arr.splice(5);
스플라이스에 대한 매개변수 정의에 따르면, 만약start
배열의 길이보다 크며, 배열의 길이로 설정됩니다.deleteCount
배열 길이보다 크거나 생략된 다음 모든 항목start
삭제됩니다.
따라서 배열을 일부로 제한하려면MAX_SIZE
(새 인스턴스를 생성하는 대신 기존 배열을 modifying) 쉬운 단축키는 다음과 같습니다.arr.splice(MAX_SIZE)
.
다른 사람들이 말했듯이, 질문에 코드가 더 많이 있지만, 질문의 제목과 정신을 고려할 때, 이것이 검색을 통해 여기에 도착하는 다른 사람들에게 유용한 답이 되기를 바랍니다.
참고: IE 5.5-8의 호환성 노트에 따르면,deleteCount
위에서 설명한 대로 작동하지 않으므로 이 솔루션은 해당 브라우저에서 제대로 작동하지 않습니다.
단축 배열은 항목을 제거한 후 실제로 사용해야 합니다.단축 배열을 무시하고 있습니다.
쿠키를 배열로 변환합니다.배열 길이를 줄인 다음 단축된 배열을 사용하지 않습니다.대신 기존 쿠키(단축되지 않은 쿠키)를 사용하면 됩니다.
단축 배열을 다음과 같은 문자열로 다시 변환해야 합니다..join(",")
사용하는 대신 새 쿠키에 사용합니다.old_cookie
단축되지 않는.
사용하지 않을 수도 있습니다..splice()
맞아요, 하지만 당신의 목표가 정확하게 무엇인지 모르겠어요.당신은 정확한 기능에 대해 읽을 수 있습니다..splice()
여기에
여기에 왔지만 배열 길이를 제한하는 기능적인 방법을 찾을 수 없었습니다.
그래서 이렇게 생각해냈습니다.
const list = ["a","b","c","d","e","f","g","h","i"];
const listWithOnly3Items = list.filter((element,index) => index < 3);
언급URL : https://stackoverflow.com/questions/14236515/can-i-limit-the-length-of-an-array-in-javascript
'programing' 카테고리의 다른 글
다른 페이지의 앵커 태그에 대한 앵커 링크가 작동하지 않음 (0) | 2023.10.29 |
---|---|
표에서 두 번째로 큰 항목 또는 세 번째로 큰 항목을 가져오는 방법 (0) | 2023.10.29 |
우분투에 php70-gd 설치 (0) | 2023.10.29 |
PowerShell에서 실행 중인 프로세스 목록을 보는 방법 (0) | 2023.10.29 |
안드로이드 전역 변수 (0) | 2023.10.29 |