获取 JavaScript 对象键列表

IT技术 javascript
2021-02-01 13:03:07

我有一个 JavaScript 对象,例如

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}

如何获取此对象中键的长度和列表?

6个回答

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+  keys);

现在大多数主要浏览器都支持

它在 Chrome 中工作的事实也意味着它在 Node.js 中工作,因为两者都构建在 V8 javascript 引擎上。
2021-03-11 13:03:07
@fet windows7 自带 IE8。尽管它会很好,但在人们停止使用 IE8 之前,这不可能成为公认的答案。
2021-03-18 13:03:07
在这里developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...您会发现一种 JavaScript 方法可以在旧浏览器中正常工作,并且不会覆盖新浏览器中的功能。另请参阅下面我的回答。
2021-03-24 13:03:07
请注意,这与for(key in ob)! Object.keys不会列出原型中的键,但是.. in obj会。
2021-04-03 13:03:07
@fet 如今,是的。两年前,没有那么多。
2021-04-09 13:03:07

var obj = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3',
  key4: 'value4'
};
var keys = [];

for (var k in obj) keys.push(k);

console.log("total " + keys.length + " keys: " + keys);

您应该看看下面的 David Morrissey 的评论,了解这里的边缘情况。有时采用这种方法会导致原型中不需要的成员出现在keys.
2021-03-17 13:03:07
@Bart:不,第一行在 JavaScript 中是必需的。
2021-03-24 13:03:07
@BartvanHeukelom 甚至早在 2010 年 6 月就引起了通知,因为这意味着您正在隐式键入对象。分配[]给它(或array()当时)使其成为一个数组,然后您可以安全地将其用作数组。
2021-03-24 13:03:07
我不认为 Javascript 就像 PHP 那样,您可以完全跳过第一行?无论如何,不​​建议这样做。
2021-04-03 13:03:07
@pat:如果您使用的是对象字面量,那么只有在您扩展时才会发生这种情况Object.prototype,无论如何您都不应该这样做。但是,对于自定义构造函数,您是对的。
2021-04-03 13:03:07

Underscore.js 使转换非常干净:

var keys = _.map(x, function(v, k) { return k; });

编辑:我错过了你也可以这样做:

var keys = _.keys(x);
没错,实际的下划线来源:nativeKeys = Object.keys; hasOwnProperty = ObjProto.hasOwnProperty; .has = function(obj, key) { return hasOwnProperty.call(obj, key); }; _.keys = nativeKeys || function(obj) { if (obj !== Object(obj)) throw new TypeError('Invalid object'); var 键 = []; for (var key in obj) if ( .has(obj, key)) keys.push(key); 返回键;};
2021-03-30 13:03:07

如果您只想要特定于该特定对象的键而不是任何派生prototype属性:

function getKeys(obj) {
    var r = []
    for (var k in obj) {
        if (!obj.hasOwnProperty(k)) 
            continue
        r.push(k)
    }
    return r
}

例如:

var keys = getKeys({'eggs': null, 'spam': true})
var length = keys.length // access the `length` property as usual for arrays
var keys = new Array();
for(var key in obj)
{
   keys[keys.length] = key;
}

var keyLength = keys.length;

要访问对象中的任何值,您可以使用 obj[key];

你需要增加数组索引
2021-03-28 13:03:07
数组索引自动增加keys.length,每次迭代都不同,因为每次迭代插入一个值。
2021-04-06 13:03:07