[英]ES5 JavaScript: Find specific property in nested objects and return its value
我需要使用 ES5 語法返回嵌套對象的特定屬性的值。 每個對象都可以有自己的結構,因此所需的屬性可以位於不同的級別/位置。 例如 -> 我有三個不同的對象,需要屬性“source”的值:
那么,如何考慮返回特定屬性的值,它可以位於對象中的任何位置?
var first_data = {
area: "South",
code: "S265",
info: {
category: "enhanced",
label: "AB | 27AS53",
variable: "VR"
},
list: {
area: "Mid",
details: [
{
source: "Spain",
totals: 12,
products: [
{
name: "ABC",
brand: "Nobrand",
id: "111",
category: "Men",
}
]
}
]
},
time: 1654775446138
};
var second_data = {
area: "South",
code: "S265",
info: {
category: "enhanced",
label: "AB | 27AS53",
variable: "VR"
},
list: {
area: "Mid",
details: [
{
products: [
{
name: "ABC",
brand: "Nobrand",
id: "111",
category: "Men",
_new: {
source: "Spain",
totals: 12
}
}
]
}
]
},
time: 1654775446138
};
var third_data = {
area: "South",
code: "S265",
info: {
category: "enhanced",
label: "AB | 27AS53",
variable: "VR"
},
list: {
area: "Mid",
details: [
{
products: [
{
name: "ABC",
brand: "Nobrand",
id: "111",
category: "Men"
}
]
}
]
},
time: 1654775446138
};
我首先嘗試用 ES6 解決它,以便我可以在第二步將其重寫為 ES5。 這是我到目前為止所擁有的。 第一個問題是,我在這里得到一個錯誤,但該屬性存在。
var propertyExists = function (obj, key) {
if(obj === null || obj === undefined) {
return false;
}
for(const k of Object.keys(obj)) {
if(k === key) {
return obj[k]
}
else {
const val = obj[k];
if(typeof val === 'object') {
if(propertyExists(val, key) === true) {
return true;
}
}
}
}
return false;
}
propertyExists(first_data, 'source')
您的propertyExists
函數不起作用,因為它返回了source
的值,但它后來檢查了該值是否等於true
(如 Felix Kling 在上面的評論中所述)。
這是我的實現(最初在 ES6 中,但我使用了目標設置為 ES5 的打字稿編譯器):
var findProp = function (obj, prop) {
if (typeof obj != "object") {
return false;
}
if (obj.hasOwnProperty(prop)) {
return obj[prop];
}
for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
var p = _a[_i];
if (typeof obj[p] === "object") {
var t = findProp(obj[p], prop);
if (t) {
return t;
}
}
}
return false;
};
注意:檢測它是哪個對象結構並檢索值可能會更快,因為這樣您就會知道它在哪里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.