按索引访问非数字对象属性?

IT技术 javascript arrays
2021-01-23 01:47:39

如果我有这样的数组:

var arr = ['one','two','three'];

我可以通过这样做访问不同的部分:

console.log(arr[1]);

如何按顺序而不是按键访问对象属性?

例子:

var obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
},
jbo = {
    'evenmore'  : 'crazy',
    'something' : 'awesome'
};

如何objjbo不明确使用属性名称的情况下获取每个对象的第一个属性——“某物”和“甚至更多”

现在,你们中的一些人似乎认为我在追求类似的东西:

console.log(obj['something']);

情况并非如此,我专门针对索引,就像第一个示例一样 - 如果可能的话。

6个回答

“我特别希望以索引为目标,就像第一个例子一样——如果可能的话。”

不,这不可能。

您可以获得的最接近的是获取对象键的数组,并使用它:

var keys = Object.keys( obj );

...但不能保证密钥会按照您定义的顺序返回。所以它最终可能看起来像:

keys[ 0 ];  // 'evenmore'
keys[ 1 ];  // 'something'
Object.keys()如果您知道对象的内容,则可以可靠地使用。更多细节在这里:stackoverflow.com/questions/280713/...
2021-03-21 01:47:39
Object.keys() 方法返回给定对象自己的可枚举属性的数组,其顺序与 for...in 循环提供的顺序相同(区别在于 for-in 循环将原型链中的属性枚举为好)。developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
2021-04-05 01:47:39
一切皆有可能
2021-04-12 01:47:39

我能想到的唯一方法是创建一个方法,使用Object.keys();.

var obj = {
    dog: "woof",
    cat: "meow",
    key: function(n) {
        return this[Object.keys(this)[n]];
    }
};
obj.key(1); // "meow"

演示:http : //jsfiddle.net/UmkVn/

可以将其扩展到所有使用的对象,Object.prototype;但通常不建议这样做。

相反,使用函数助手:

var object = {
  key: function(n) {
    return this[ Object.keys(this)[n] ];
  }
};

function key(obj, idx) {
  return object.key.call(obj, idx);
}

key({ a: 6 }, 0); // 6
这很酷,而且效果很好!为什么它不是公认的答案?您可能应该使用return this[Object.keys(this)[n]];它来使其通用。
2021-03-16 01:47:39
你好,从 2016 年开始,我们未来的人仍然认为这应该是公认的答案。很好的解决方案
2021-03-26 01:47:39
之所以不被接受,是因为直到 es6,Object.keys 的顺序是无法保证的。因此,即使该代码适用于少数 JS 引擎,也不能保证适用于所有引擎。stackoverflow.com/questions/5525795/...
2021-04-10 01:47:39

您可以使用该Object.values()方法,如果你不想使用Object.keys()

Object.keys()返回给定对象自己的可枚举属性数组方法相反,例如:

const object1 = {
 a: 'somestring',
 b: 42,
 c: false
};

console.log(Object.keys(object1));

将打印出以下数组:

[ 'a', 'b', 'c' ]

Object.values()方法返回给定对象自己的可枚举属性的数组values

因此,如果您有相同的对象但使用值来代替,

const object1 = {
 a: 'somestring',
 b: 42,
 c: false
};

console.log(Object.values(object1));

你会得到以下数组:

[ 'somestring', 42, false ]

因此,如果您想访问object1.b, 但使用索引,您可以使用:

Object.values(object1)[1] === 42

您可以在此处阅读有关此方法的更多信息

本主题中建议的这种方法似乎是最短和最优雅的。
2021-03-20 01:47:39
var obj = {
    'key1':'value',
    '2':'value',
    'key 1':'value'
}

console.log(obj.key1)
console.log(obj['key1'])
console.log(obj['2'])
console.log(obj['key 1'])

// will not work
console.log(obj.2)

编辑:

“我特别希望以索引为目标,就像第一个例子一样——如果可能的话。”

实际上,“索引”是关键。如果要存储键的位置,则需要创建一个自定义对象来处理此问题。

@Brogrammer:你的问题模棱两可,所以这篇文章确实有可能回答所写的问题。
2021-04-09 01:47:39
我知道您可以通过密钥访问它,这不是我要问的。
2021-04-13 01:47:39

通过 jquery,你可以这样做:

var arr = $.map(obj,function(value, key) {
    return value;
});
alert(obj[0]);