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?
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?
You can do that by using this simple code:
Object.keys(myObject).length
There's no easy answer, because Object
— which every object in JavaScript derives from — includes many attributes automatically, and the exact set of attributes you get depends on the particular interpreter and what code has executed before yours. So, you somehow have to separate the ones you defined from those you got "for free."
Here's one way:
var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
Object.prototype.foobie = 'bletch'; // add property to foo that won't be counted
var count = 0;
for (var k in foo) {
if (foo.hasOwnProperty(k)) {
++count;
}
}
alert("Found " + count + " properties specific to foo");
The second line shows how other code can add properties to all Object
derivatives. If you remove the hasOwnProperty()
check inside the loop, the property count will go up to at least 4. On a page with other JavaScript besides this code, it could be higher than 4, if that other code also modifies the Object
prototype.
Use underscore library, very useful: _.keys(obj).length
.
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"};
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
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;
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
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