通过索引访问非数字对象属性?
如果我有这样的数组:
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']);
事实并非如此,我特别关注索引,就像第一个例子 – 如果可能的话。
“我特别想把目标locking在指数上,就像第一个例子 – 如果可能的话。”
不,这是不可能的。
你可以得到最接近的是获得一个对象的数组的键,并使用它:
var keys = Object.keys( obj );
…但不能保证按照您定义的顺序返回密钥。 所以它可能最终看起来像:
keys[ 0 ]; // 'evenmore' keys[ 1 ]; // 'something'
我能想到的唯一方法就是创build一个方法,使用Object.keys();
给你属性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;
将其扩展到所有对象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
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)
编辑:
“我特别想把目标locking在指数上,就像第一个例子 – 如果可能的话。”
其实“索引”是关键。 如果你想存储一个键的位置,你需要创build一个自定义对象来处理这个。
如果你不确定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]);