我一直想知道我是否可以消除下面函数中的重复行,但是无法达到非递归解决方案。
出于好奇,有没有办法消除重复的行,但没有递归?
function accumulateOverProtos(obj, propName) {
var accumulator = []
if (obj.hasOwnProperty(propName)) accumulator.push(obj[propName])
while (obj = Object.getPrototypeOf(obj)) {
if (obj.hasOwnProperty(propName)) accumulator.push(obj[propName])
}
return accumulator
}
另外,有人能指点我这方面的一些阅读吗?这个问题叫什么问题?
答案 0 :(得分:3)
do...while
的完美用例。
function accumulateOverProtos(obj, propName) {
var accumulator = [];
do {
if (obj.hasOwnProperty(propName)) accumulator.push(obj[propName]);
} while (obj = Object.getPrototypeOf(obj));
return accumulator;
}
答案 1 :(得分:1)
您可以使用简单的for
循环:
function accumulateOverProtos(obj, propName) {
var accumulator = [];
for (; obj; obj = Object.getPrototypeOf(obj))
if (obj.hasOwnProperty(propName)) accumulator.push(obj[propName]);
return accumulator;
}