특정 어레이 인덱스에 값이 존재하는 경우 JavaScript에서 체크인을 하려면 어떻게 해야 합니까?
은 위치 값이 """ "" "" "" " " " " " " " " " " " " " " " " " " " 의 에 효과가 ?index
존재 여부, 또는 더 나은 방법이 있는지 여부:
if(arrayName[index]==""){
// do stuff
}
에는 JavaScript가 포함되어 있습니다.array.length
「」로 하는 요소, 「」로 시작하는 요소array[0]
array[array.length - 1]
.i
、 is 、 is 、 is is is is is is is is is is is is is is is is is is is is is의 경우 배열의 됩니다.i
의 중간이다0
★★★★★★★★★★★★★★★★★」array.length - 1
가 이에 포함되지 않습니다.이 범위에 포함되지 않으면 배열에 포함되지 않습니다.
즉, 개념상 어레이는 제로부터 시작하여 최대까지 선형이며 엔트리가 존재하지 않는 범위 내에 "갭"을 두는 메커니즘이 없습니다.지정된 위치 지수(인덱스가 0 또는 양의 정수)에 값이 있는지 확인하려면 문자 그대로 다음을 사용합니다.
if (i >= 0 && i < array.length) {
// it is in array
}
JavaScript 엔진에서는 어레이 공간을 선형으로 연속적으로 할당하지 않습니다.동적인 언어에서는 그다지 의미가 없고 특정 코드에 대해서는 비효율적이기 때문입니다.해시 테이블 또는 전략의 하이브리드 혼합일 수 있으며, 정의되지 않은 어레이 범위에는 자체 메모리가 할당되지 않을 수 있습니다.에서는 이 을 나타냅니다.array.length
n은 n개의 멤버를 가지며 0 ~n - 1이라는 이름이 붙습니다.이 범위에 포함되는 것은 모두 배열의 일부입니다.
단, 어레이 내의 값이 실제로 정의되어 있는지 아닌지를 확인하는 것이 좋습니다.undefined
정의되어 있는지, 정의되어 있지 않은지 알고 싶을 수도 있습니다.멤버 값을 설정하지 않고 어레이에 멤버를 추가할 수 있습니다.예를 들어 어레이 값을 늘려서array.length
은 모두 「」, 「」가 .undefined
지정된 값이 의미 있는 것인지 또는 정의된 것인지를 판단합니다.즉, 아니다. undefined
, 「」null
:
if (typeof array[index] !== 'undefined') {
또는
if (typeof array[index] !== 'undefined' && array[index] !== null) {
흥미롭게도 JavaScript의 비교 규칙 덕분에 마지막 예는 다음과 같이 최적화될 수 있습니다.
if (array[index] != null) {
// The == and != operators consider null equal to only null or undefined
}
그냥 이렇게 하면 안 돼?
if(arrayName.length > 0){
//or **if(arrayName.length)**
//this array is not empty
}else{
//this array is empty
}
「」만 .length
는 안전하지 않으며 일부 브라우저에서 오류가 발생합니다.여기 더 나은 솔루션이 있습니다.
if(array && array.length){
// not empty
} else {
// empty
}
또는 다음을 사용할 수 있습니다.
Object.keys(__array__).length
if(!arrayName[index]){
// do stuff
}
if(arrayName.length > index && arrayName[index] !== null) {
//arrayName[index] has a value
}
짧고 보편적인 접근법
배열에 거짓 값(false, defined, null 또는 빈 문자열 등)이 있는지 확인하려면 every() 메서드를 다음과 같이 사용합니다.
array.every(function(element) {return !!element;}); // returns true or false
예를 들어 다음과 같습니다.
['23', null, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false
['23', '', 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false
['23', true, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns true
false 값의 첫 번째 인덱스를 취득할 필요가 있는 경우는, 다음과 같이 실시할 수 있습니다.
let falsyIndex;
if(!['23', true, 2, null, {key: 'value'}].every(function(element, index) {falsyIndex = index; return !!element;})) {
console.log(falsyIndex);
} // logs 3
특정 인덱스에 대해 배열의 거짓 값을 확인해야 하는 경우 다음과 같이 수행할 수 있습니다.
if (!!array[index]) {
// array[index] is a correct value
}
else {
// array[index] is a falsy value
}
if(typeof arr ==='object' && arr instanceof Array ){
if(!arr.length){
println 'empty'
}else{
printn 'not Empty'
}
}else{
println 'Null'
}
'Null' -> 그 요소가 null 이거나 같은 경우: 모든 'null' 요소를 필터링한 후 어레이가 비어 있는지 확인합니다.
if(!arr.clean().length){return 'is null'}
물론 Add Clean method before:
Array.prototype.clean=function(){return this.filter(function(e){return (typeof e !=='undefined')&&(e!= null)&&(e!='')})}
'비어 있다'는 말이 무슨 뜻인지에 따라 다르죠.
값 "이(가) 됩니다.undefined
.
이와 배열 사이의 모든 . 모든 인덱스가0
★★★★★★★★★★★★★★★★★」array.length-1
'아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아!array[index] === undefined
.
「」, 「」는index
와 함께 존재할 수 있다undefined
이 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . .in
"operator"hasOwnProperty
"How do I check an object is a property in JavaScript?"에서 설명한 바와 같이.
index in array;
array.hasOwnProperty(index);
「」를 .undefined
★★★★★★★★★★★★★★★★★」null
존재하지 는, comparison 「비교」를 사용합니다.array[index] == undefined
★★★★★★★★★★★★★★★★★」array[index] == null
.
희박하지 않은 index
array.length
도 모릅니다.index
실제로 어레이 인덱스입니다. 속성 이름이 어레이 인덱스인지 확인을 참조하십시오.
다음과 같은 기능을 만들 것을 권장합니다.
function isEmptyEl(array, i) {
return !(array[i]);
}
이렇게 부를 수 있습니다.
if (isEmptyEl(arrayName, indexVal)) {
console.log('arrayName[' + indexVal + '] is empty');
}
개발자가 isEmptyEl 인터페이스를 강제로 준수하도록 하면 정의되지 않은 arrayName 또는 indexVal 변수와 같은 입력 오류가 발생합니다.
(Javascript로 프로그래밍할 때는 일반적으로 방어적으로 프로그래밍하는 것이 좋습니다.)
arrayName이 정의되지 않은 경우 다음과 같은 오류가 발생합니다.
Uncaught ReferenceError: arrayName is not defined
at <anonymous>:2:15
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
정의되지 않은 indexVal에 대해서도 유사한 결과가 나타납니다.
어레이 또는 인덱스 값이 존재하지 않으면 오류가 발생합니다.
유효한 입력의 경우 arrayName[indexVal]이 다음 중 하나일 경우에만 true가 됩니다.
- 무효
- 정의되어 있지 않다
- NaN
- 빈 문자열
- 0
- 거짓의
일부에서 간과하고 있는 것 같은 점을 지적하고 싶습니다.즉, 어레이의 중앙에 「빈」어레이를 배치할 수 있습니다.다음 사항을 고려하십시오.
let arr = [0, 1, 2, 3, 4, 5]
delete arr[3]
console.log(arr) // [0, 1, 2, empty, 4, 5]
console.log(arr[3]) // undefined
어레이 멤버가 정의되어 있지 않은지 여부를 확인하는 것이 자연스러운 방법입니다.다른 방법이 있는지 어떤지는 잘 모르겠습니다.
if (arr[index] === undefined) {
// member does not exist
}
검출: " " " "in
아직 에 대해 하지 않은 . 사람들은 가 10년을 사용할 때 합니다.delete
연산자(예: 여기)이것도 약간 직감적인 해결책이지만in
world할 수 ('를 볼 수 때문입니다)., 리, 리, 리, 그, 이, 이, 이, 이, 이, 이, 이, 이, 이, in, in, between, in, in, in, in, in, between, between, between, between, between, in, 을 구별undefined
과 값이 삭제되었습니다.delete
if(index in arrayName) {
// do stuff
}
let arr = [0, 1, 2, 3, null, undefined,6]
delete arr[2]; // we delete element at index=2
if(2 in arr) console.log('You will not see this because idx 2 was deleted');
if(5 in arr) console.log('This is element arr[5]:', arr[5]);
// Whole array and indexes bigger than arr.length:
for(let i=0; i<=9; i++) {
let val = (i in arr) ? arr[i] : 'empty'
let bound = i<arr.length ? '' : '(out of range)'
console.log(`${i} value: `, val, bound);
}
console.log('Look on below aray on chrome console (not in SO snippet console)');
console.log('typeof arr:', typeof arr);
console.log(arr);
Chrome 콘솔에서는 인덱스 2가 삭제된 스니펫 배열에 대한 일부 정보가 표시됩니다. 이 인덱스는 실제로 존재하지 않습니다(!!!). (키를 개체에서 제거하는 것과 같은 방법입니다.)여기서도 흥미로운 점은 어레이가 키와 값의 쌍으로 표시된다는 것입니다('길이' 키도 표시됨). 은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」typeof arr
는 오브젝트입니다.입delete
★★★★★★★★★★★★★★★★★」in
오브젝트에 표기도 JS입니다).arr[idx]
★★★★★★★★★★★★★★★★★」obj[key]
는 유사합니다).따라서 어레이는 코어의 특수한 JS 오브젝트인 것 같습니다.
.delete
과 같이
[0, 1,, 3, null, undefined, 6] // pay attention to double comma: ",,"
자, 먼저 어레이 값이 JavaScript에 존재하지 않는 경우 다음과 같은 어레이가 있는 경우 어떻게 되는지 살펴보겠습니다.
const arr = [1, 2, 3, 4, 5];
이제 인덱스 5에 6이 있는지 확인합니다.
arr[5];
그리고 우리는undefined
이것이 기본적으로 정답을 제시합니다.정의되지 않은 경우 확인하는 가장 좋은 방법입니다.이러한 방법은 다음과 같습니다.
if("undefined" === typeof arrayName[index]) {
//array value is not there...
}
이 경우는, 이것을 실시하지 않는 것이 좋습니다.
if(!arrayName[index]) {
//Don't check like this..
}
다음과 같은 어레이가 있다고 가정해 봅시다.
const arr = [0, 1, 2];
또, 다음과 같은 일이 있습니다.
if(!arr[0]) {
//This get passed, because in JavaScript 0 is falsy
}
보시는 바와 같이 0이 있어도 인식되지 않습니다.다른 몇 가지 방법으로 같은 기능을 할 수 있기 때문에 어플리케이션 버그가 발생할 수 있으므로 주의해 주십시오.이것들은 모두 기재되어 있습니다.
- undefined: 값이 정의되지 않은 경우
undefined
- null: null인 경우(예를 들어 DOM 요소가 존재하지 않는 경우)...
- 빈 문자열:
''
- 0: 숫자 0
- NaN: 숫자가 아닙니다.
- 거짓의
어레이[인덱스]가 null인 경우 시도합니다.
if (array[index] != null)
Lodash를 통해 얻을 수 있는 이점은 다음과 같습니다.
if(_.has(req,'documents')){
if (req.documents.length)
_.forEach(req.documents, function(document){
records.push(document);
});
} else {
}
if(_.has(req,'documents'))
에 ''이라는 속성이 입니다.documents
그 받침대가 받침대가 요.if (req.documents.length)
배열이 이므로, 그 은 빈 배열이 아닌지를 검증하는 것입니다.그 때문에, 다른 것은 다음과 같습니다.forEach
진행할 수 있습니다.
정의된 적이 없거나 삭제되었는지 확인하려면 다음 절차를 따릅니다.
if(typeof arrayName[index]==="undefined"){
//the index is not in the array
}
또한 일부 인덱스를 삭제한 관련 배열 및 배열과도 함께 작동합니다.
정의되지 않았는지, 삭제되었는지, 또는 Null 또는 논리적인 빈 값(NaN, 빈 문자열, false)인지 확인하려면:
if(typeof arrayName[index]==="undefined"||arrayName[index]){
//the index is not defined or the value an empty value
}
나는 라라벨 데이타블을 사용하여 이 문제에 부딪쳤다. 값을 .properties
이 값을 기준으로 버튼이 비어 있는지 여부를 표시하려고 합니다.
데이터 테이블은 비어 있으면 어레이로 해석하고 비어 있지 않으면 오브젝트로 해석하고 있었습니다.따라서 다음 솔루션이 도움이 되었습니다.
render: function (data, type, full) {
if (full.properties.length !== 0) {
// do stuff
}
}
개체에 길이 속성이 없습니다.
이 결정은 필수 OOP나 절차보다 선언적 기능 프로그래밍을 선호하는 남성들에게 적절하다고 생각합니다.만약 당신의 질문이 "그 안에 어떤 가치가 있는가?"라고 묻는다면. (트러티 또는 가짜 값)"을 사용할 수 있습니다..some
이치노
[].some(el => el || !el);
- , 같은.
function isEmpty(arr) { ... }
. - 그래도 '길이가 제로인가?'보다 더 좋은 것 같아요.
[].length
으로 '''가 되다''0
어떤 경우에는 위험합니다. [].length > 0
"길이 0보다 커요?"라고 묻습니다.
고급 예:
[ ].some(el => el || !el); // false
[null].some(el => el || !el); // true
[1, 3].some(el => el || !el); // true
빈 어레이 값을 생성할 때 정의되지 않은 값이 비어 있음
var arr = new Array(10); // (10) [empty × 10]
그러나 인덱스로 항목을 얻을 때 정의되지 않은 수신
arr[0]; // undefined
따라서 ===을(를) 비교하여 정의되지 않았는지 또는 비어 있는지 알 수 없습니다.
JSON.stringify를 사용하여 어레이 전체를 변환하여 빈 값을 null로 바꿉니다.
JSON.stringify(arr); // "[null,null,null,null,null,null,null,null,null,null]"
JSON.stringify(arr[0]); // but for single item it returns undefined
따라서 빈 값을 실제로 확인합니다.
arr[0] !== null && JSON.stringify(arr.map(item => !item)).slice(1, -1).split(',')[0] === 'null'
- 항목을 null과 비교합니다(같으면 안 됩니다).
- removing " " map
false
대신 기존 값(용장 콤마 없이 쉼표로 구분되는 문자열 구조 필요) - JSON.stringify 배열
- 스트링에서 괄호를 제거하다
- 콤마로 배열하다
null
Loadsh 라이브러리를 사용하면 다음과 같은 작업을 보다 효율적으로 수행할 수 있습니다.
예를 들어 "syslog"라는 이름의 배열이 있는 경우:
var pets = ['dog', undefined, 'cat', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });
모든 어레이 값에 null 또는 정의되지 않은 값이 있는지 확인하려면:
var pets = ['dog', undefined, 'cat', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
자세한 예는 http://underscorejs.org/에서 확인하세요.
언급URL : https://stackoverflow.com/questions/2672380/how-do-i-check-in-javascript-if-a-value-exists-at-a-certain-array-index
'programing' 카테고리의 다른 글
MariaDB: dynamic_columns로 데이터 인파일 로드 (0) | 2022.12.06 |
---|---|
동일한 방법으로 (서로 참조하는)2개의 리스트를 정렬하는 방법 (0) | 2022.12.06 |
스레드 풀에서 스레드 ID를 가져오려면 어떻게 해야 합니까? (0) | 2022.12.06 |
VuesJ, v-for 루프에서 랜덤 키 생성 (0) | 2022.11.27 |
파이어베이스 관찰 방법auth().currentUser.displayName 및 기타 변경 속성 (0) | 2022.11.27 |