获取键/值 javascript 对象的键的最佳方法

Posted

技术标签:

【中文标题】获取键/值 javascript 对象的键的最佳方法【英文标题】:best way to get the key of a key/value javascript object 【发布时间】:2011-09-10 06:04:31 【问题描述】:

如果我有一个像这样的 JS 对象:

var foo =  'bar' : 'baz' 

如果我知道foo 具有基本的键/值结构,但不知道键的名称,那么最简单的方法是什么? for ... in? $.each()?我希望有更好的东西......

【问题讨论】:

for ... in 有什么问题? 感觉是间接的,你必须使用hasOwnProperty。我想我会做一个库函数来做到这一点...... 【参考方案1】:

您将使用 for 循环在对象内部进行迭代:

for(var i in foo)
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value

或者

Object.keys(foo)
  .forEach(function eachKey(key)  
    alert(key); // alerts key 
    alert(foo[key]); // alerts value
  );

【讨论】:

如果我不想foo[i]成为"_proto_"怎么办? developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 不想alert()foo[i]ifiissome string怎么办? @user2284570: i 可以是字符串 - 没问题。 你不是说 for(var i in Object.keys(foo)) 【参考方案2】:

您可以单独访问每个键而无需迭代,如下所示:

var obj =  first: 'someVal', second: 'otherVal' ;
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second

【讨论】:

您现在可以为此目的使用扩展运算符,它看起来更好:const [firstKey, ...rest] = Object.keys(obj);【参考方案3】:

如果您想获取所有密钥,ECMAScript 5 introduced Object.keys。这仅受较新的浏览器支持,但MDC documentation 提供了另一种实现(也使用for...in btw):

if(!Object.keys) Object.keys = function(o)
     if (o !== Object(o))
          throw new TypeError('Object.keys called on non-object');
     var ret=[],p;
     for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
     return ret;

当然,如果你想要key和value,那么for...in是唯一合理的解决方案。

【讨论】:

p 给了我密钥,但我如何获得密钥的值?谢谢。 对于键和值,使用新的 Object.entries() developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 也许这表明我的理解有限,但是对于像获取键/值这样简单的事情,这个答案似乎非常冗长(诚然可重用)。 @Michael Benin 的答案不应该被标记为最佳答案吗? 呃...其他人点击第一个链接会被重定向到匿名麻醉品吗?【参考方案4】:

给定你的对象:

var foo =  'bar' : 'baz' 

要获取bar,请使用:

Object.keys(foo)[0]

要获取baz,请使用:

foo[Object.keys(foo)[0]]

假设一个对象

【讨论】:

【参考方案5】:

为您提供一个班轮

const OBJECT = 
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3',
    'key4': 'value4'
;

const value = 'value2';

const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];

window.console.log(key); // = key2

【讨论】:

【参考方案6】:

这是最简单的方法。我们就是这样做的。

var obj =  'bar' : 'baz' 
var key = Object.keys(obj)[0];
var value = obj[key];
     
 console.log("key = ", key) // bar
 console.log("value = ", value) // baz
Object.keys() 是在对象上使用时返回键数组的 javascript 方法。
Object.keys(obj) // ['bar']

现在您可以迭代对象并可以访问如下值-

Object.keys(obj).forEach( function(key) 
  console.log(obj[key]) // baz
)

【讨论】:

如果您希望键是数字,您可能会收到TypeError。因为键总是字符串。【参考方案7】:
// iterate through key-value gracefully
const obj =  a: 5, b: 7, c: 9 ;
for (const [key, value] of Object.entries(obj)) 
  console.log(`$key $value`); // "a 5", "b 7", "c 9"

参考 MDN

【讨论】:

【参考方案8】:

我遇到了同样的问题,这是有效的

//example of an Object
var person = 
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
;

//How to access a single key or value
var key = Object.keys(person)[0];
var value = person[key];

【讨论】:

为什么不var value = person[key];?这样您就不必知道要提取的值的键。【参考方案9】:

获取对象键/值的最佳方法。

let obj = 
        'key1': 'value1',
        'key2': 'value2',
        'key3': 'value3',
        'key4': 'value4'
    
    Object.keys(obj).map(function(k) 
    console.log("key with value: "+k +" = "+obj[k])    
    
    )
    

【讨论】:

【参考方案10】:

除了for (var key in foo),我什么也没看到。

【讨论】:

【参考方案11】:

既然你提到了$.each(),下面是一个适用于 jQuery 1.6+ 的便捷方法:

var foo =  key1: 'bar', key2: 'baz' ;

// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) 
  return key;
);

【讨论】:

【参考方案12】:

最简单的方法就是使用 Underscore.js:

按键

_.keys(对象) 检索对象属性的所有名称。

_.keys(一: 1, 二: 2, 三: 3); => [“一”、“二”、“三”]

是的,您需要一个额外的库,但这很简单!

【讨论】:

@lonesomeday 是的,但下划线/lodash 在许多其他方面也很有用,因此值得一提。【参考方案13】:

除了for ... in,别无他法。如果您不想使用它(可能是因为每次迭代都必须测试hasOwnProperty 效率很低?)然后使用不同的构造,例如kvp 的数组:

[ key: 'key', value: 'value', ...]

【讨论】:

【参考方案14】:

用于每个循环以访问 javascript 中的 Object 或 Maps 中的键

for(key in foo)
   console.log(key);//for key name in your case it will be bar
   console.log(foo[key]);// for key value in your case it will be baz

注意:你也可以使用

Object.keys(foo);

它会给你这样的 输出:

[条];

【讨论】:

【参考方案15】:

Object.keys() Object.keys() 方法返回给定对象自己的可枚举属性的数组,其顺序与 for...in 循环提供的顺序相同(不同之处在于 for-in 循环将原型链中的属性枚举为好)。

var arr1 = Object.keys(obj);

Object.values() Object.values() 方法返回给定对象自己的可枚举属性值的数组,其顺序与 for...in 循环提供的顺序相同(不同之处在于 for-in 循环枚举原型链中的属性以及)。

var arr2 = Object.values(obj);

更多信息请转至here

【讨论】:

【参考方案16】:

$.each 是库结构,而for ... in 是原生 js,应该会更好

【讨论】:

【参考方案17】:

您可以使用 Object.keys 功能来获取键,例如:

const tempObjects=foo:"bar"

Object.keys(tempObjects).forEach(obj=>
   console.log("Key->"+obj+ "value->"+tempObjects[obj]);
);

【讨论】:

【参考方案18】:

要显示为字符串,只需使用:

console.log("they are: " + JSON.stringify(foo));

【讨论】:

【参考方案19】:

如果您使用的是 AWS CloudFront 函数,那么这对您有用。

function handler(event) 
    var response = event.response;
    var headers = response.headers;
    if("x-amz-meta-csp-hash" in headers) 
        hash=headers["x-amz-meta-csp-hash"].value;
        console.log('hash is ' + hash);
    

【讨论】:

以上是关于获取键/值 javascript 对象的键的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

如何根据对象数组中的键获取值javascript

具有定义值的打字稿动态对象键

Java中的Hashtable如何根据值获取键?

字典使所有键的值等于最近的键/值添加

使用 C 类型 uuid_t 作为 std::map 中的键的最佳方法是啥?

具有未知键的对象的打字稿类型,但只有数值?