日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径

發(fā)布時(shí)間:2025/3/21 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問:JavaScript 如何查找對象中某個(gè) value 并返回路徑上所有的 key?

let obj = {

key1: 'str1',

key2: {

key3: 'str3'

},

key4: {

key5: {

key6: 'str6',

key7: 'str7'

},

key8: 'str8'

},

key9: 'str9'

};

有例如上面這樣一個(gè)對象,要求封裝一個(gè)函數(shù),傳入對象和某個(gè) value,返回該 value 路徑上的 key。比如:searchKeys(obj, "str3"),得到 "key3, key2"?!?來源于 @zanetti 的一篇 「博問」

我本想在該「博問」下作答,但是「博客園」提示我注冊尚且不滿 24 小時(shí),不允許我回答「博問」欄目的問題。好吧,我確實(shí)是 3 月 16 日晚上剛剛注冊的「博客園」賬號,既然無法回答那就干脆寫第一篇博客。博客的申請?jiān)?3 月 17 日早上剛剛審核通過。

言歸正傳,這題要求遍歷對象,而本質(zhì)其實(shí)就是對一個(gè)多叉樹進(jìn)行遞歸。

封裝函數(shù)并遍歷對象

第一步是最簡單的,不必多說。

function search(object, value) {

for (var key in object) {

// ...

}

}

必須先有結(jié)果

既然知道這里需要遞歸,那么最重要一點(diǎn)就是必須找到結(jié)果,因?yàn)闆]有最終結(jié)果的遞歸操作肯定會(huì)「無法自拔」。此題,當(dāng) key 對應(yīng)的值等于 value 時(shí),遞歸就將結(jié)束,代碼如下。

if (object[key] == value) {

return [key];

} else {

}

然后思考遞歸

現(xiàn)在需要分析一下,如果沒有找到 value,object[key] 的值有哪些情況?

1、一個(gè)不等于 value 字符串;2、一個(gè)對象。

如果是一個(gè)字符串,那么肯定是不需要任何操作,繼續(xù)下一次 for ... in 循環(huán)即可。如果是一個(gè)對象,那么繼續(xù)對這個(gè)對象重復(fù)剛剛的遍歷操作,此處即遞歸。

if (typeof(object[key]) == "object") {

var temp = search(object[key], value);

}

繼續(xù)分析(理論上腦子里面可以假設(shè)這是倒數(shù)第二步即可)。

假如遞歸的操作并沒有找到 value,那么返回值是什么?我用一個(gè) temp 變量來接收返回值,而沒有找到 value 肯定就沒有返回值,所以 temp 應(yīng)該是 undefined。

假如遞歸的操作找到了 value,那么返回值是什么?對,是 key(這里我為了輸出方便,使用了數(shù)組存放所有的 key)。既然得到了最后一步的 key,把他與當(dāng)前的 key 放在一起即可。

if (temp == undefined) {

} else {

return [key, temp].flat();

}

這里我是用了 flat() 方法,這個(gè)方法可以抹平一個(gè)數(shù)組。不管嵌套了多少的數(shù)組,都會(huì)展開成為一個(gè)無嵌套數(shù)組。

舉個(gè)例子:array = ["a", "b", ["c", "d"], ["e", ["f"]]] => array = array.flat() => array = ["a", "b", "c", "d", "e", "f"];

最終函數(shù)

function search(object, value) {

for (var key in object) {

if (object[key] == value) {

return [key];

} else if (typeof(object[key]) == "object") {

var temp = search(object[key], value);

if (temp == undefined) {

} else {

return [key, temp].flat();

}

} else {

}

}

}

再稍微修改一下。

function search(object, value) {

for (var key in object) {

if (object[key] == value) return [key];

if (typeof(object[key]) == "object") {

var temp = search(object[key], value);

if (temp) return [key, temp].flat();

}

}

}

至此,第一篇博客寫完。我接觸 JavaScript 的時(shí)間不長,也是個(gè)新手,好在這題主要是遞歸算法,如有錯(cuò)誤請?jiān)谠u論中指出,不勝感激!

總結(jié)

以上是生活随笔為你收集整理的查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。