Suppose I have the following object in JavaScript:
var object = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};
How do I find out how many values exist in the object?
This question is related to
javascript
object
You can do that by using this simple code:
Object.keys(myObject).length
This function makes use of Mozilla's __count__
property if it is available as it is faster than iterating over every property.
function countProperties(obj) {
var count = "__count__",
hasOwnProp = Object.prototype.hasOwnProperty;
if (typeof obj[count] === "number" && !hasOwnProp.call(obj, count)) {
return obj[count];
}
count = 0;
for (var prop in obj) {
if (hasOwnProp.call(obj, prop)) {
count++;
}
}
return count;
};
countProperties({
"1": 2,
"3": 4,
"5": 6
}) === 3;
For those which will read this question/answers, here is a JavaScript implementation of Dictionary collection very similar as functionality as .NET one: JavaScript Dictionary
var miobj = [
{"padreid":"0", "sw":"0", "dtip":"UNO", "datos":[]},
{"padreid":"1", "sw":"0", "dtip":"DOS", "datos":[]}
];
alert(miobj.length) //=== 2
but
alert(miobj[0].length) //=== undefined
this function is very good
Object.prototype.count = function () {
var count = 0;
for(var prop in this) {
if(this.hasOwnProperty(prop))
count = count + 1;
}
return count;
}
alert(miobj.count()) // === 2
alert(miobj[0].count()) // === 4
Although it wouldn't be a "true object", you could always do something like this:
var foo = [
{Key1: "key1"},
{Key2: "key2"},
{Key3: "key3"}
];
alert(foo.length); // === 3
You can iterate over the object to get the keys or values:
function numKeys(obj)
{
var count = 0;
for(var prop in obj)
{
count++;
}
return count;
}
It looks like a "spelling mistake" but just want to point out that your example is invalid syntax, should be
var object = {"key1":"value1","key2":"value2","key3":"value3"};
Use underscore library, very useful: _.keys(obj).length
.
EDIT: this will case errors with jquery to happen, plus some other inconveniences. YOU SHOULD NOT USE IT: (perhaps if one could add a privaate method instead of a public property function, this would be OK, but don't have the time now). Community wikied
do not use:
Even though javascript's object by default doesn't have the count function, classes are easily extendable, and one can add it oneself:
Object.prototype.count = function () {
var count = 0;
for(var prop in this) {
if(this.hasOwnProperty(prop))
count = count + 1;
}
return count;
}
So that after that one can execute
var object = {'key1': 'val1', 'key2':'val2', 'key3':'val3'};
console.log(object.count()); // 3
As a conclusion, if you want count functionality in objects, you need to copy the code from code block 1, and paste it early in execution time ( before you call the count ).
Let me know if that works for you!
Regards, Pedro
Source: Stackoverflow.com