我调用这样的函数:
update_insert('information',{
element_id: 1,
type: 'menu',
info: 'Hi how are ya?',
new_window: ''
});
功能是:
function update_insert(table,data){
alert(data.length);
}
我正在尝试获取插入函数的键的数量,并最终通过循环动态获取键的名称。我怎样才能做到这一点?
答案 0 :(得分:4)
对象在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;
}
答案 1 :(得分:1)
您可以使用以下功能获取密钥(在旧版浏览器中可以安全使用)...
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
的{{1}}属性,以确定密钥数量。
如果要挖掘原型链上的所有可枚举属性,可以使用...
Array
或者,您可能非常希望使用对象的var getObjectKeysIncludingInherited = function(obj) {
var keys = [],
i = 0;
for (keys[i++] in obj);
return keys;
}
属性来执行此操作,但请不要。增加本机JavaScript对象被认为有点危险,而且它有点令人困惑(length
没有Object
属性但length
属性)并且它在旧版本中不起作用浏览器...
Array
答案 2 :(得分:0)
也许是这样的事情?
function update_insert(table,data){
var dataLength = 0, keys = [];
for(prop in data) {
if(data.hasOwnProperty(prop)) {
dataLength++;
keys.push(prop);
}
}
}
数组实际上是具有自定义length
属性的对象(以及其他一些东西:P
),因此并非所有对象都具有length
属性。
答案 3 :(得分:0)
var names = new Array();
for(name in data)
{
if(data.hasOwnProperty(name))
{
names.push(name);
}
}
names.length - will give you what you need.
答案 4 :(得分:0)
var keys = [];
for(var k in data) {
if(Object.prototype.hasOwnProperty(data, k)) {
keys.push(data[k]);
}
}
k.length //size of keys
答案 5 :(得分:0)
如果您是jQuery粉丝或潜在用户:
var size = 0;
$.each(obj, function(key, value) {
alert('key = ' + key);
alert('value = ' + value);
size++;
});
alert(size);