获取JavaScript对象键列表

2020/10/04 17:01 · javascript ·  · 0评论

我有一个JavaScript对象,例如

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

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

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

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

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

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

Underscore.js使转换非常干净:

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

编辑:我想念你也可以这样做:

var keys = _.keys(x);

如果您只想要特定于该特定对象的键,而不想要任何派生的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];

obj = {'a':'c','b':'d'}

你可以试试:

[index for (index in obj)] 

这将返回:

['a','b']

获取键列表或

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

获得价值

阿努拉格人的回答基本上是正确的。但是,为了也支持Object.keys(obj)较旧的浏览器,您可以使用从https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys复制的以下代码

Object.keys(obj)如果浏览器不提供方法,则会添加该方法。

if (!Object.keys) {
 Object.keys = (function() {
 'use strict';
 var hasOwnProperty = Object.prototype.hasOwnProperty,
    hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
    dontEnums = [
      'toString',
      'toLocaleString',
      'valueOf',
      'hasOwnProperty',
      'isPrototypeOf',
      'propertyIsEnumerable',
      'constructor'
    ],
    dontEnumsLength = dontEnums.length;

return function(obj) {
  if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
    throw new TypeError('Object.keys called on non-object');
  }

  var result = [], prop, i;

  for (prop in obj) {
    if (hasOwnProperty.call(obj, prop)) {
      result.push(prop);
    }
  }

  if (hasDontEnumBug) {
    for (i = 0; i < dontEnumsLength; i++) {
      if (hasOwnProperty.call(obj, dontEnums[i])) {
        result.push(dontEnums[i]);
      }
    }
  }
  return result;
};
}());
}

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

k for k of obj

因此

(1 for _ of obj).length

支持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;
};
var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}

console.log(Object.keys(obj));
console.log(Object.keys(obj).length)

使用Object.keys()...这是要走的路。

完整的文档可在以下链接的MDN网站上找到:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

如果您决定使用Underscore.js,则最好这样做

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

var keys = [];
_.each( obj, function( val, key ) {
    keys.push(key);
});
console.log(keys.lenth, keys);

在JavaScript中,对象是具有属性和类型的独立实体。

对于阵列的形式从对象获取的值:
对象.values(OBJ)// obj是您使用的对象名称
结果- > [“VALUE1”,“VALUE2”,“值3”,“值4”]

为了从对象中以数组形式获取键:
Object .keys(obj)// obj是您使用的对象名称
结果-> [“” key1“,” key2“,” key3“,” key4“]

由于两个函数都返回数组,因此您可以使用length属性获取键的长度或值。例如- 对象.values(OBJ)。长度 对象.keys(OBJ)。长度

对于列出了JSON对象键的逗号分隔字符串,请尝试以下操作:

function listKeys(jObj){
    var keyString = '';
    for(var k in jObj){
        keyString+=(','+k);
    }
    return keyString.slice(1);
}



/* listKeys({'a' : 'foo', 'b' : 'foo', 'c' : 'foo'}) -> 'a,b,c' */

使用ES6,您可以forEach用来迭代对象的键。要获取所有键,可以使用Object.keys它返回对象中的所有键

Object.keys(obj).forEach(function(keyValue, index, map) { 
  console.log(keyValue); 
});

以上代码段的简称是,只需一个参数

Object.keys(obj).forEach(function(keyValue) { 
  console.log(keyValue); 
});
       if(props.userType){
          var data = []
          Object.keys(props.userType).map(i=>{
                data.push(props.userType[i])
          })
          setService(data)
        }

使用切片,应用和联接方法。

var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());
本文地址:http://javascript.askforanswer.com/huoqujavascriptduixiangjianliebiao.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!