JavaScript 개체의 길이
JavaScript 개체가 있습니다.이 오브젝트의 길이를 알 수 있는 빌트인 또는 인정된 베스트 프랙티스 방법이 있습니까?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
갱신된 답변
다음은 2016년 업데이트와 ES5 이후 광범위한 배포입니다.IE9+ 및 기타 모든 최신 ES5+ 지원 브라우저에서는 위의 코드를 사용할 수 있습니다.
var size = Object.keys(myObj).length;
Object.keys()
이치노
편집: 개체는 개체를 통해 반환할 수 없는 심볼 속성을 가질 수 있습니다.키 메서드그래서 그것들을 언급하지 않으면 답은 불완전할 것이다.
오브젝트 속성의 고유 식별자를 작성하기 위해 언어에 기호 유형이 추가되었습니다.기호 유형의 주요 이점은 덮어쓰기를 방지하는 것입니다.
Object.keys
★★★★★★★★★★★★★★★★★」Object.getOwnPropertyNames
는 심볼 속성에는 사용할 수 없습니다.하려면 , 「 」를 사용할 .Object.getOwnPropertySymbols
.
var person = {
[Symbol('name')]: 'John Doe',
[Symbol('age')]: 33,
"occupation": "Programmer"
};
const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1
let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2
오래된 답변
가장 확실한 답변은 다음과 같습니다(즉, 버그를 최소화하면서 실행하려는 의도를 포착하는 것).
Object.size = function(obj) {
var size = 0,
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
const myObj = {}
var size = Object.size(myObj);
JavaScript에는 Object.protype에 추가하지 않는 규칙이 있습니다.이는 다양한 라이브러리의 열거가 깨질 수 있기 때문입니다.그러나 보통 오브젝트에 메서드를 추가하는 것은 안전합니다.
할 안다면hasOwnProperty
Object.keys() 메서드는 다음과 같이 사용할 수 있습니다.
Object.keys(myArray).length
갱신일 :Underscore.js(권장, 경량!)를 사용하고 있는 경우는, 다음과 같이 할 수 있습니다.
_.size({one : 1, two : 2, three : 3});
=> 3
그렇지 않고 어떤 이유로든 오브젝트 속성을 조작하고 싶지 않고 이미 jQuery를 사용하고 있다면 플러그인에 동일하게 액세스할 수 있습니다.
$.assocArraySize = function(obj) {
// http://stackoverflow.com/a/6700/11236
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
여기 가장 크로스 브라우저 솔루션이 있습니다.
이는 네이티브 개체를 사용하기 때문에 허용된 답변보다 더 좋습니다.키를 누릅니다(존재하는 경우)따라서, 이것은 모든 최신 브라우저 중에서 가장 빠릅니다.
if (!Object.keys) {
Object.keys = function (obj) {
var arr = [],
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
arr.push(key);
}
}
return arr;
};
}
Object.keys(obj).length;
저는 JavaScript 전문가는 아니지만 Object에는 길이 메서드가 없기 때문에 요소를 루프하여 셀 필요가 있는 것 같습니다.
var element_count = 0;
for (e in myArray) { if (myArray.hasOwnProperty(e)) element_count++; }
@secsey:OP에 대한 공평성을 위해 JavaScript 문서에서는 객체 유형의 변수를 이러한 방식으로 사용하는 것을 "관련 배열"이라고 명시적으로 언급하고 있습니다.
하여 「이것」을 수 있습니다.length
:
Object.keys(myObject).length
이 메서드는 배열 내의 모든 개체의 속성 이름을 가져오므로 개체 키 길이와 동일한 배열 길이를 가져올 수 있습니다.
Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2
프로토타입이나 다른 코드를 조작하지 않기 위해서, 독자적인 오브젝트를 작성 및 확장할 수 있습니다.
function Hash(){
var length=0;
this.add = function(key, val){
if(this[key] == undefined)
{
length++;
}
this[key]=val;
};
this.length = function(){
return length;
};
}
myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // will alert 2
항상 add 메서드를 사용하면 길이 속성이 정확해집니다.만약 본인이나 다른 사람이 그것을 사용하는 것을 잊어버릴까봐 걱정된다면, 다른 사람이 올린 속성 카운터를 길이법에 추가할 수도 있습니다.
물론 언제든지 메서드를 덮어쓸 수 있습니다.단, 디버깅을 해도 코드가 눈에 띄게 실패하기 때문에 디버깅이 쉬워집니다.;)
오브젝트의 길이는 다음을 사용하여 확인할 수 있습니다.
const myObject = {};
console.log(Object.values(myObject).length);
프로토타입 체인에 해당 자산이 없는지 확인하는 방법을 알려드립니다.
var element_count = 0;
for(var e in myArray)
if(myArray.hasOwnProperty(e))
element_count++;
다음은 최신 브라우저(Internet Explorer 9+, Chrome, Firefox 4+, Opera 11.60+ 및 Safari 5.1+)에서만 작동하는 완전히 다른 솔루션입니다.
이 jsFiddle을 보세요.
관련 어레이 클래스 설정
/**
* @constructor
*/
AssociativeArray = function () {};
// Make the length property work
Object.defineProperty(AssociativeArray.prototype, "length", {
get: function () {
var count = 0;
for (var key in this) {
if (this.hasOwnProperty(key))
count++;
}
return count;
}
});
이제 이 코드를 다음과 같이 사용할 수 있습니다.
var a1 = new AssociativeArray();
a1["prop1"] = "test";
a1["prop2"] = 1234;
a1["prop3"] = "something else";
alert("Length of array is " + a1.length);
용도:
var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
obj = Object.keys(myArray).length;
console.log(obj)
<script>
myObj = {"key1" : "Hello", "key2" : "Goodbye"};
var size = Object.keys(myObj).length;
console.log(size);
</script>
<p id="myObj">The number of <b>keys</b> in <b>myObj</b> are: <script>document.write(size)</script></p>
이것으로 충분합니다.
var size = Object.keys(myObj).length;
크기를 표시하는 연관 데이터 구조가 필요한 경우 개체 대신 지도를 사용하는 것이 좋습니다.
const myMap = new Map();
myMap.set("firstname", "Gareth");
myMap.set("lastname", "Simpson");
myMap.set("age", 21);
console.log(myMap.size); // 3
Object.keys(myObject).length
/어레이의
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
console.log(Object.keys(myObject).length); //3
경우에 따라 크기를 별도의 변수에 저장하는 것이 좋습니다.특히, 어레이에 1개의 요소를 1개의 장소에 추가해, 간단하게 사이즈를 늘릴 수 있습니다.사이즈를 자주 확인해야 한다면 당연히 훨씬 더 빠를 거예요.
@secsey:OP에 대한 공평성을 위해 JavaScript 문서에서는 객체 유형의 변수를 이러한 방식으로 사용하는 것을 "관련 배열"이라고 명시적으로 언급하고 있습니다.
그리고 @palmsey에게 공평하게 말하자면 그는 꽤 옳았다.이들은 연관지을 수 있는 어레이가 아니라 오브젝트입니다:) 연관지을 수 있는 어레이의 작업을 수행합니다.하지만 더 넓은 점에 관해서는, 내가 발견한 꽤 훌륭한 기사에 따르면, 당신은 분명히 그것에 대한 권리를 가지고 있는 것 같습니다.
유해하다고 간주되는 JavaScript "어소시에이션 어레이"
하지만 이 모든 것에 따르면, 받아들여진 답변 자체가 나쁜 관행이라고?
개체의 프로토타입 크기() 함수를 지정합니다.
Object .protype에 다른 항목이 추가된 경우 제안된 코드는 실패합니다.
<script type="text/javascript">
Object.prototype.size = function () {
var len = this.length ? --this.length : -1;
for (var k in this)
len++;
return len;
}
Object.prototype.size2 = function () {
var len = this.length ? --this.length : -1;
for (var k in this)
len++;
return len;
}
var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
alert("age is " + myArray["age"]);
alert("length is " + myArray.size());
</script>
같은 실행 컨텍스트에서 실행 중인 다른 코드가 있으면 작동한다고 믿을 수 없기 때문에 그 답변은 받아들여지지 않아야 한다고 생각합니다.견고하게 하기 위해서는 myArray 내에서 사이즈 방법을 정의하고 반복하면서 멤버의 종류를 확인해야 합니다.
가장 간단한 방법은 다음과 같습니다.
Object.keys(myobject).length
여기서 myobject는 원하는 길이의 객체입니다.
해시가 있으면
해시 = {"a" : "b", "c" : "d"};
해시의 길이인 키의 길이를 사용하여 길이를 얻을 수 있습니다.
키(키)길이
이런 건 어때?
function keyValuePairs() {
this.length = 0;
function add(key, value) { this[key] = value; this.length++; }
function remove(key) { if (this.hasOwnProperty(key)) { delete this[key]; this.length--; }}
}
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
- Object.values(myObject).길이
- Object.entries(myObject).길이
- Object.keys(myObject).길이
AngularJS 1.x를 사용하는 경우 Angular는JS는 필터를 만들고 다음과 같은 다른 예제의 코드를 사용합니다.
// Count the elements in an object
app.filter('lengthOfObject', function() {
return function( obj ) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
}
})
사용.
컨트롤러 내:
$scope.filterResult = $filter('lengthOfObject')($scope.object)
또는 다음과 같이 생각하십시오.
<any ng-expression="object | lengthOfObject"></any>
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
console.log(Object.keys(myObject).length)
// o/p 3
상기 중 몇 가지는 다음과 같습니다.
var objLength = function(obj){
var key,len=0;
for(key in obj){
len += Number( obj.hasOwnProperty(key) );
}
return len;
};
이것은 hasOwnProp를 통합하는 좀 더 우아한 방법입니다.
Internet Explorer 8 이하를 지원하지 않는 경우 다음 두 단계를 수행하면 개체의 속성 수를 쉽게 얻을 수 있습니다.
- 열거할 수 있는 속성의 이름만 포함하는 배열을 가져오거나 열거할 수 없는 속성의 이름을 포함하려면 이 중 하나를 실행합니다.
- 해당 배열의 속성을 가져옵니다.
이 작업을 여러 번 수행해야 하는 경우 다음 로직을 함수로 묶을 수 있습니다.
function size(obj, enumerablesOnly) {
return enumerablesOnly === false ?
Object.getOwnPropertyNames(obj).length :
Object.keys(obj).length;
}
이 특정 기능의 사용 방법:
var myObj = Object.create({}, {
getFoo: {},
setFoo: {}
});
myObj.Foo = 12;
var myArr = [1,2,5,4,8,15];
console.log(size(myObj)); // Output : 1
console.log(size(myObj, true)); // Output : 1
console.log(size(myObj, false)); // Output : 3
console.log(size(myArr)); // Output : 6
console.log(size(myArr, true)); // Output : 6
console.log(size(myArr, false)); // Output : 7
여기 제임스 코건의 다른 답변이 있습니다.인수를 전달하는 대신 Object 클래스를 프로토타입으로 만들어 코드를 더 깔끔하게 만듭니다.
Object.prototype.size = function () {
var size = 0,
key;
for (key in this) {
if (this.hasOwnProperty(key)) size++;
}
return size;
};
var x = {
one: 1,
two: 2,
three: 3
};
x.size() === 3;
jsfiddle의 예:http://jsfiddle.net/qar4j/1/
언제든지 할 수 있다Object.getOwnPropertyNames(myObject).length
같은 결과를 얻다[].length
정상적인 배열에 적합합니다.
간단하게 사용할 수 있습니다.Object.keys(obj).length
모든 물체의 길이를 구합니다.물건.keys는 대응하는 배열의 길이를 사용하여 해당 개체의 길이를 찾는 데 유용한 모든 개체 키(속성)를 포함하는 배열을 반환합니다.이 함수도 쓸 수 있어요.창의력을 발휘하여 (더 편리한 getter 속성과 함께) 메서드도 작성합시다.
function objLength(obj)
{
return Object.keys(obj).length;
}
console.log(objLength({a:1, b:"summit", c:"nonsense"}));
// Works perfectly fine
var obj = new Object();
obj['fish'] = 30;
obj['nullified content'] = null;
console.log(objLength(obj));
// It also works your way, which is creating it using the Object constructor
Object.prototype.getLength = function() {
return Object.keys(this).length;
}
console.log(obj.getLength());
// You can also write it as a method, which is more efficient as done so above
Object.defineProperty(Object.prototype, "length", {get:function(){
return Object.keys(this).length;
}});
console.log(obj.length);
// probably the most effictive approach is done so and demonstrated above which sets a getter property called "length" for objects which returns the equivalent value of getLength(this) or this.getLength()
사용방법Object.entries
길이를 구하는 방법은 그것을 달성하는 한 가지 방법이다.
const objectLength = obj => Object.entries(obj).length;
const person = {
id: 1,
name: 'John',
age: 30
}
const car = {
type: 2,
color: 'red',
}
console.log(objectLength(person)); // 3
console.log(objectLength(car)); // 2
이를 위한 좋은 방법(Internet Explorer 9+만 해당)은 길이 속성에서 매직게터를 정의하는 것입니다.
Object.defineProperty(Object.prototype, "length", {
get: function () {
return Object.keys(this).length;
}
});
이렇게 사용할 수 있습니다.
var myObj = { 'key': 'value' };
myObj.length;
그것은 줄 것이다.1
.
언급URL : https://stackoverflow.com/questions/5223/length-of-a-javascript-object
'source' 카테고리의 다른 글
나가는 것과 돌아오는 것의 차이는 무엇입니까? (0) | 2022.12.08 |
---|---|
MySQL "텍스트" 필드에 UTF-8 텍스트가 어느 정도 들어갑니까? (0) | 2022.12.08 |
PDO 준비 스테이트먼트:예상된 결과 대신 NULL 가져오기 (0) | 2022.12.08 |
python의 zip과 같은 php 기능이 있나요? (0) | 2022.12.08 |
Galera 클러스터에서 쓰기 속도를 높이는 방법은 무엇입니까?최대 축척을 DB 프록시로 사용 (0) | 2022.12.08 |