我这样调用一个函数:
update_insert('information',{
element_id: 1,
type: 'menu',
info: 'Hi how are ya?',
new_window: ''
});
功能是:
function update_insert(table,data){
alert(data.length);
}
我试图获取插入函数的键的数量,并最终通过循环动态地获取键的名称。我怎样才能做到这一点?
我这样调用一个函数:
update_insert('information',{
element_id: 1,
type: 'menu',
info: 'Hi how are ya?',
new_window: ''
});
功能是:
function update_insert(table,data){
alert(data.length);
}
我试图获取插入函数的键的数量,并最终通过循环动态地获取键的名称。我怎样才能做到这一点?
对象不像 JavaScript 中的数组那样具有 .length 属性。您需要使用一个函数来计算对象中的项目数:
getObjectLength = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key))
size++;
}
return size;
}
编辑:
并从对象中获取密钥:
getObjectKeys = function(obj) {
var keys = [];
for (var key in obj) {
keys.push(key);
}
return keys;
}
您可以使用以下功能获取密钥(在旧浏览器中可以安全使用)...
var getObjectKeys = function(obj) {
if (Object.keys && typeof Object.keys == "function") {
return Object.keys(obj);
}
var prop, keys = [];
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
keys.push(prop);
}
}
return keys;
}
或者,使用和使用旧浏览器Object.keys()
的等效项。[shim][2]
您可以检查length
返回的属性Array
以确定键的数量。
如果您想挖掘原型链上的所有可枚举属性,您可以使用...
var getObjectKeysIncludingInherited = function(obj) {
var keys = [],
i = 0;
for (keys[i++] in obj);
return keys;
}
或者,您可能真的想使用length
对象的属性来执行此操作,但请不要。增加原生 JavaScript 对象被认为有些危险,而且有点令人困惑(Object
s 没有length
属性,但Array
s 有)并且它在旧浏览器中不起作用......
Object.defineProperty(Object.prototype, "length", {
get: function() {
return Object.keys(this).length;
}
});
大概是这样的吧?
function update_insert(table,data){
var dataLength = 0, keys = [];
for(prop in data) {
if(data.hasOwnProperty(prop)) {
dataLength++;
keys.push(prop);
}
}
}
数组实际上是具有自定义length
属性(和其他一些东西:P
)的对象,因此并非所有对象都具有length
属性。
var names = new Array();
for(name in data)
{
if(data.hasOwnProperty(name))
{
names.push(name);
}
}
names.length - will give you what you need.
var keys = [];
for(var k in data) {
if(Object.prototype.hasOwnProperty(data, k)) {
keys.push(data[k]);
}
}
k.length //size of keys
如果您是 jQuery 粉丝或潜在用户:
var size = 0;
$.each(obj, function(key, value) {
alert('key = ' + key);
alert('value = ' + value);
size++;
});
alert(size);