我有一个JavaScript对象

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

我怎么能得到这个对象中的键的长度和列表?


当前回答

       if(props.userType){
          var data = []
          Object.keys(props.userType).map(i=>{
                data.push(props.userType[i])
          })
          setService(data)
        }

其他回答

注意,在coffeescript中,这可以在所有浏览器和节点as中完成

k for k of obj

因此

(1 for _ of obj).length
       if(props.userType){
          var data = []
          Object.keys(props.userType).map(i=>{
                data.push(props.userType[i])
          })
          setService(data)
        }
obj = {'a':'c','b':'d'}

你可以试试:

[index for (index in obj)] 

这将返回:

['a','b']

来获取键的列表 或

[obj[index] for (index in obj)]

来得到这些值

支持ECMAScript 5的浏览器递归解决方案:

var getObjectKeys = function(obj) {
    var keys = Object.keys(obj);
    var length = keys.length;

    if (length !== 0) {
        for (var i = 0; i < length; i++) {
            if (typeof obj[keys[i]] === 'object') {
                keys[keys[i]] = getObjectKeys(obj[keys[i]]);
            }
        }
    }

    return keys;
};

下面是从嵌套对象/数组中获取所有键的解决方案。

它将递归地检查数组中的对象。

function Keys() { let keys = []; this.pushKey = function (key) { keys.push(key); }; this.getKeys = function () { return keys; }; } let keys = new Keys(); let arr = [ { a: 1, b: { c: [{ d: 1, e: [{ f: 1 }] }], }, }, { g: 1, h: { i: [{ j: 1, k: [{ l: 1 }] }], }, }, ]; function getObject(arr) { for (let item of arr) { if (Array.isArray(item)) getObject(item); else getKeys(item); } } function getKeys(obj) { for (let key in obj) { if (Array.isArray(obj[key])) getObject(obj[key]); else if (typeof obj[key] === "object") getKeys(obj[key]); keys.pushKey(key); } } getObject(arr); console.log(keys.getKeys());