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

Javascript 是否按索引访问非数字对象属性?,javascript,arrays,Javascript,Arrays,如果我有这样一个数组: var arr = ['one','two','three']; 我可以通过以下操作访问不同的部分: console.log(arr[1]); 如何按顺序而不是键访问对象属性 例如: var obj = { 'something' : 'awesome', 'evenmore' : 'crazy' }, jbo = { 'evenmore' : 'crazy', 'something' : 'awesome' }; 如果不明确使用

如果我有这样一个数组:

var arr = ['one','two','three'];
我可以通过以下操作访问不同的部分:

console.log(arr[1]);
如何按顺序而不是键访问对象属性

例如:

var obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
},
jbo = {
    'evenmore'  : 'crazy',
    'something' : 'awesome'
};
如果不明确使用属性名称,如何获取每个对象的第一个属性—
obj
中的“something”和
jbo
中的“evenmore”

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

console.log(obj['something']);
事实并非如此,我特别关注索引,就像第一个例子一样——如果可能的话

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)
编辑:

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

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

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

不,不可能

最接近的方法是获取对象的键数组,并使用该数组:

var keys = Object.keys( obj );
…但不能保证密钥将按照您定义的顺序返回。所以它最终可能看起来像:

keys[ 0 ];  // 'evenmore'
keys[ 1 ];  // 'something'

我能想到的唯一方法是创建一个方法,使用
Object.keys()为您提供属性

演示:

可以使用
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

如果您不确定Object.keys()是否会按正确的顺序返回键,可以尝试使用此逻辑

var keys = []
var obj = {
    'key1' : 'value1',
    'key2' : 'value2',
    'key3' : 'value3',
}
for (var key in obj){
    keys.push(key)
}
console.log(obj[keys[1]])
console.log(obj[keys[2]])
console.log(obj[keys[3]])

通过jquery,您可以执行以下操作:

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

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

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

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

console.log(Object.keys(object1));
将打印出以下数组:

[ 'a', 'b', 'c' ]
[ 'somestring', 42, false ]
Object.values()
方法返回给定对象自身可枚举属性的数组

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

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

console.log(Object.values(object1));
您将获得以下数组:

[ 'a', 'b', 'c' ]
[ 'somestring', 42, false ]
因此,如果您想访问
object1.b
,但使用索引,您可以使用:

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

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

获取密钥数组,将其反转,然后运行循环

  var keys = Object.keys( obj ).reverse();
  for(var i = 0; i < keys.length; i++){
    var key = keys[i];
    var value = obj[key];
    //do stuff backwards
  }
var-keys=Object.keys(obj.reverse();
对于(变量i=0;i
您可以创建一个填充了对象字段的数组,并在数组上使用索引,通过该索引访问对象属性

propertiesName:['pr1','pr2','pr3']

this.myObject[this.propertiesName[0]]

我继续为你做了一个函数:

Object.prototype.getValueByIndex=函数(索引){
/*
getOwnPropertyNames()接受对象的一个参数,
并返回所有属性的数组。
在本例中,它将返回:[“something”,“evenmore”]。
因此,这个[Object.getOwnPropertyNames(this)[index]];实际上与:
此[propertyName]
*/
返回此[Object.getOwnPropertyNames(this)[index]];
};
设obj={
“某物”:“棒极了”,
“甚至更多”:“疯狂”
};

console.log(obj.getValueByIndex(0));//预期输出:“awesome”
当然这是可能的,但它并不像通过索引访问数组那样直接,但仍然是可能的,实际上甚至是相对简单的:事实上,您不必太费劲。此代码示例将显示如何:

var obj={
'阿尔法':'关键阿尔法的obj值',
'β':'关键β的obj值',
“gamma”:“obj键gamma的值”
};
var jbo={
‘阿尔法’:‘jbo关键阿尔法的价值’,
“beta”:“jbo密钥beta的值”,
“gamma”:“jbo键gamma的值”
};
警报(obj[Object.keys(obj)[1]]);
警报(jbo[Object.keys(jbo)[1]]);
/*您甚至可以将其放入for循环,如下所示*/

对于(i=0;i)“对象数组”是什么意思。数组是一个对象。你是指一个不是数组的对象,还是指一个对象数组。jQuery是如何考虑你的问题的?你唯一的代码示例说明了你已经知道如何处理的部分。给一些代码来说明这个问题如何。@迪恩斯,我认为任何知道jQuery的人都必须了解数组,不要反驳我的问题,它是教科书上的东西。事实上,我想说,知道jQuery和不知道JavaScript的人比不知道JavaScript的人要多(至少知道JavaScript的人应该能够轻松理解jQuery)..关于您的实际问题:不,您不能通过索引访问objec属性。它们不是按顺序排列的。“…我想任何了解jQuery的人都必须了解数组的…”我不敢打赌。@Brogrammer:这个问题与jQuery无关,所以jQuery标记不合适。我知道你可以通过键访问它,这不是我要问的。@Brogrammer:你的问题很模糊,所以这篇文章可能会回答书面问题。这很酷,很有魅力!为什么它不是accepted答案?您可能应该使用
返回此[Object.keys(this)[n]]
使其通用。您好,从2016年开始,我们未来的人仍然认为这应该是公认的答案。伟大的解决方案之所以不是公认的答案,是因为在es6之前,Object.keys的顺序是无法保证的。因此,即使该代码在一些JS引擎中工作,也不能保证在所有的引擎中工作。
Object.keys()如果您知道对象的内容,则可以可靠地使用。
。此处的更多详细信息:object.keys()方法返回给定对象自身可枚举属性的数组,其顺序与for…in循环提供的顺序相同(区别在于for in循环枚举属性)