Javascript中有什么方法可以立即訪問具有特定深度的物件值?
有一個例子:
{
"level": {
"value": "one",
"level": {
"value": "two",
"level": {
"value": "three",
"level": {
"value": "four",
"level": {
"value": "five"
}
}
}
}
}
}
我可以通過遞回來做到這一點。檢查第一個物件值level,如果它存在,則轉到下一個物件,當我需要深度時,我需要停止。如果沒有達到深度并且下一個level值不存在,則引發一些錯誤。
也許還有其他方法和方法可以做到這一點?
uj5u.com熱心網友回復:
根據物件的深度,您可能會遇到堆疊溢位。為了格外小心,我只使用一個while回圈。
每次您想要獲取某個深度的值時,您都可以撰寫一個函式來遍歷該物件。如果您只運行一次,這很好,但是,如果您需要多次呼叫它,這將是低效的,因為時間復雜度為 O(n)。
相反,我會將物件展平,以便您擁有一種查找陣列。flatten 函式的時間復雜度是 O(n),但隨后的每次查找都是 O(1)。看看這段代碼:
function flatDepth(obj) {
let res = [];
while(typeof obj === 'object') {
res.push(obj.value);
obj = obj.level;
}
return res;
}
const obj = {
"level": {
"value": "one",
"level": {
"value": "two",
"level": {
"value": "three",
"level": {
"value": "four",
"level": {
"value": "five"
}
}
}
}
}
}
const flattened = flatDepth(obj);
console.log(flattened);
console.log(flattened[3]); // => 3
console.log(flattened[0]); // => undefined
console.log(flattened[5]); // => undefined
uj5u.com熱心網友回復:
您可以在沒有遞回的情況下獲得特定級別的值,如下所示:
const obj = {
"level": {
"value": "one",
"level": {
"value": "two",
"level": {
"value": "three",
"level": {
"value": "four",
"level": {
"value": "five"
}
}
}
}
}
};
const getValueAtLevel = level => {
let p = obj.level;
while(level-- > 1) p = p.level;
return p.value;
}
console.log(getValueAtLevel(2));
或者,您可以像這樣展平:
const obj = {
"level": {
"value": "one",
"level": {
"value": "two",
"level": {
"value": "three",
"level": {
"value": "four",
"level": {
"value": "five"
}
}
}
}
}
};
const flatten = obj => {
let p = obj, r = [];
while(p.level) { r.push(p.level.value); p = p.level; }
return r;
}
console.log(flatten(obj));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/528340.html
上一篇:遞回呼叫且應用程式處于后臺時,UIViewPropertyAnimator行為不正確
下一篇:這個問題有O(n^2)的方法嗎?
