Its*_*has 2 javascript javascript-objects angularjs
我试图在不知道对象value的key情况下找到一个对象,包括嵌套对象,因此该函数将获取一个键和一个对象并返回值或未定义。这是我的功能:
/* Iterate over object and include sub objects */
function iterate (obj, key) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
//in case it is an object
if (typeof obj[property] == "object") {
if (obj.hasOwnProperty(key)) {
return obj[key]; //return the value
}
}
else {
iterate(obj[property]);
}
}
}
return undefined;
}
Run Code Online (Sandbox Code Playgroud)
我return在一个循环内调用,所以它会更有效率(希望如此......)。
1.有没有人准备好这个功能?这个不行。
2.有人知道要改变什么才能使它工作吗?
任何帮助,包括angular.js功能都会很棒。
谢谢。
你把事情颠倒了一点,你忘了将第二个参数传递给递归函数调用。此外,在这种情况下,不需要 return undefined,因为这是默认设置。
function iterate (obj, key) {
var result;
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
// in case it is an object
if (typeof obj[property] === "object") {
result = iterate(obj[property], key);
if (typeof result !== "undefined") {
return result;
}
}
else if (property === key) {
return obj[key]; // returns the value
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:实际上,我们应该在检查值是否是可迭代对象之前检查属性是否等于键,如果我们正在寻找其值为对象的键。感谢@Catinodeh!
function iterate (obj, key) {
var result;
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
if (property === key) {
return obj[key]; // returns the value
}
else if (typeof obj[property] === "object") {
// in case it is an object
result = iterate(obj[property], key);
if (typeof result !== "undefined") {
return result;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4692 次 |
| 最近记录: |