Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否将对象键转换为数组列表?_Javascript_Arrays - Fatal编程技术网

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
不包括继承的属性。