Javascript 是否将对象键转换为数组列表?
如果我有这样一个对象:Javascript 是否将对象键转换为数组列表?,javascript,arrays,Javascript,Arrays,如果我有这样一个对象: var o = {a:1,b:2,c:3}; 我想得到: ['a','b','c']; 我想使用for(var I in o),因为这将包括prototype链中的属性。如果我不需要原型链中的属性,我可以使用Object.keys(o) 我想我可以在这里使用一些Array.prototype.*方法。像map但这对我来说太超前了 我可以从循环中生成字符串并进行拆分。但是,有没有更高效、更专业的方法呢?如果你有以下方法 var o = {a:1,b:2,c:3}; 创
var o = {a:1,b:2,c:3};
我想得到:
['a','b','c'];
我想使用for(var I in o)
,因为这将包括prototype链中的属性。如果我不需要原型链中的属性,我可以使用Object.keys(o)
我想我可以在这里使用一些Array.prototype.*
方法。像map
但这对我来说太超前了
我可以从循环中生成字符串并进行拆分。但是,有没有更高效、更专业的方法呢?如果你有以下方法
var o = {a:1,b:2,c:3};
创建一个新的空数组来存储密钥
var array_keys = new Array();
然后使用for循环将键推入数组
for (var key in o) {
array_keys.push(key);
}
然后,您可以运行警报(数组密钥)您可以使用lodash中的密钥方法 您还可以使用以下代码
var arr = [];
var o = {a:1,b:2}
for(k in o) { arr.push(k); }
这是另一个深入研究对象的版本
function getKeys(o) { var arr = []; for(k in o) { arr.push(k); if(typeof(o[k]) === 'object') { arr.push(getKeys(o[k])); }} return arr; }
如果你有一个像{a:1,b:2,c:{d:1,e:2}这样的对象,你会得到返回值为['a','b','c',['d','e']
一个完全扁平的版本就是这个
function getKeys(o) { var arr = []; for(k in o) { arr.push(k); if(typeof(o[k]) === 'object') { for(j of getKeys(o[k])){ arr.push(j); } }} return arr; }
这是一个解决方案,它避免了您提到的中…的
。但是,我认为
中的解决方案中的“for…”要优雅得多
这将遍历原型链,并作为递归函数返回所有属性。以及删除所有重复项
function getKeys(obj) {
var keys = Object.keys(obj);
var parent = Object.getPrototypeOf(obj);
if (!parent) {
return keys;
}
return keys.concat(getKeys(parent))
.filter(function (item, index, col) {
return col.indexOf(item) === index;
});
}
var a = { a: 1, b: 2 };
var b = Object.create(a);
b.a = 2;
b.c = 3;
var c = Object.create(b);
console.log(getKeys(c));
var a=[];for(var oe in o){a.push(oe);}
@ZeRubeus:JSON.stringify
不包括继承的属性。