javascript - 如果 Key 存在于也包含数组的 JavaScript 对象中,则查找并返回值
问题描述
var OBJ = {
code: 42,
item1: [{
id: 1,
name: 'foo'
}, {
id: 2,
city: 'NY'
name: 'bar'
}],
thing: [{
id: 14,
name: 'foo'
}, {
id: 5,
street: 'E43'
name: 'pub'
}]
};
Javascript对象(OBJ)我需要一个返回KEY值的方法如果OBJ方法中不存在KEY我作为参数传递应该返回未定义
getKeyValueFromObject(OBJ , 'street') // should return 'E43'
getKeyValueFromObject(OBJ , 'dog') // should return undefined
我试过这个(不工作)
getKeyValueFromObject(obj: any, search: string) {
const notFound = {};
Object.keys(obj).forEach(key => {
if (key !== null && key !== undefined && !(obj[key] === undefined || obj[key] === null)) {
if (key === search) {
return obj[key];
} else if (obj[key].constructor === {}.constructor) {
const result = this.getKeyValueFromObject(obj[key], search);
if (result !== notFound) return result;
} else if (Array.isArray(obj[key])) {
obj[key].forEach(element => {
const result = this.getKeyValueFromObject(element, search);
if (result !== notFound) return result;
});
}
}
});
return {};
}
解决方案
您的代码几乎可以正常工作,但代码中的return
语句forEach
没有按预期工作。看这里:在 JavaScript 中获取返回值并摆脱 forEach?. 相反,我使用变量resultKey
来存储匹配项。
您的 OBJ json 中缺少一些逗号,但我认为这不是主要问题。
var OBJ = {
code: 42,
item1: [{
id: 1,
name: 'foo'
}, {
id: 2,
city: 'NY',
name: 'bar'
}],
thing: [{
id: 14,
name: "foo"
}, {
id: 5,
street: "E43",
name: "pub"
}]
};
function getKeyValueFromObject(obj, search) {
let resultKey = undefined;
const notFound = {};
Object.keys(obj).forEach(key => {
if (key !== null && key !== undefined && !(obj[key] === undefined || obj[key] === null)) {
if (key === search) {
resultKey = obj[key];
} else if (obj[key].constructor === {}.constructor) {
const result = this.getKeyValueFromObject(obj[key], search);
if (result !== notFound) resultKey = result;
} else if (Array.isArray(obj[key])) {
obj[key].forEach(element => {
const result = this.getKeyValueFromObject(element, search);
if (result !== notFound) resultKey = result;
});
}
}
return;
});
return resultKey;
}
console.log(getKeyValueFromObject(OBJ, "street"));
console.log(getKeyValueFromObject(OBJ , "dog"));