将键和属性从对象推送到数组

时间:2016-05-24 02:06:40

标签: javascript

我想从对象中推送所有属性和键,包括嵌套的属性和键。这就是我在尝试的方式:

'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'];

2 个答案:

答案 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;
}