我想从对象中推送所有属性和键,包括嵌套的属性和键。这就是我在尝试的方式:
'use strict';
var getProps = function getProps(destination, object) {
destination = destination || [];
for (var key in object) {
typeof object[key] === 'object' && object[key] !== 'null'
? destination.push(getProps(destination, object[key]))
: destination.push(key);
}
return destination;
}
var object = {
one: {
two: 'three'
}
};
console.log(getProps([], object))
如你所见,工作不正常。
提前致谢。
更新 -
欲望输出:
['one', 'two', 'three'];
答案 0 :(得分:1)
您可以使用递归来实现所需的结果。
var object = {
one: {
two: 'three'
},
four: {
five: 'six',
seven: [
'eight',
'nine',
'ten'
],
eleven: {
twelve: {
thirteen: {
fourteen: 'fifteen'
}
}
}
}
};
function rabbitHole(output, object) {
for (var i in object) {
if (!Array.isArray(object)) {
output.push(i);
}
if (typeof object[i] == 'object') {
rabbitHole(output, object[i]);
} else {
output.push(object[i]);
}
}
return output;
}
var output = rabbitHole([], object);
console.log(output);

答案 1 :(得分:1)
您可以使用JSON.stringify
的副作用来简化代码。
function keysAndVals(object) {
var result = [];
JSON.stringify(object, function(key, val) {
result.push(key);
if (typeof val !== "object") result.push(val);
return val;
});
return result;
}