我在 codewars 上解決一個 kata。 https://www.codewars.com/kata/5540e75396737c4cea000092/train/javascript
我能夠解決 kata,但我無法重構我的代碼以獲得正確的函式輸出
問題描述
通過創建一個回傳包含針(字串)的所有屬性(遞回)的函式,在大海撈針中找到針。
回傳值應該是一個排序陣列。
function search(haystack, needle, arr = []) {
for (let key in haystack) {
const keyOne = haystack[key]
if (typeof keyOne === 'string' && keyOne.indexOf(needle) !== -1) {
key
arr.push(keyOne[key]??=key)
}
else if (typeof keyOne === 'object' ) {
search(keyOne, needle, arr)
}
}
return arr
}
const obj = {
site: "Codewars",
description: "Lorem ipsum dolor sit...",
obj2: {
str: "Yeah, Codewars!",
num: 123,
obj3: {
something: "Ph'nglui mglw'nafh Codewars R'lyeh wgah'nagl fhtagn. Gotha fm'latgh h'gof'nn, geb chtenff"
}
}
};
console.log(search(obj, 'Codewars')) //results =[ 'site', 'str', 'something' ]
但是我的解決方案必須回傳具有這個確切輸出的輸出
["obj2.obj3.something", "obj2.str", "site"]
那么是否有任何提示或技巧可以告訴我掌握更多 Js 邏輯?
uj5u.com熱心網友回復:
此代碼通過了測驗。謝謝大家
function search(haystack, needle, arr = [], path = []) {
for (let key in haystack) {
const keyOne = haystack[key]
if (typeof keyOne === 'string' && keyOne.indexOf(needle) !== -1) {
key
arr.push(path.join`.` '.' key)
}
else if (typeof keyOne === 'object' ) {
search(keyOne, needle, arr, path.concat(key))
}
}
return arr.map(e => e.startsWith('.') ? e.slice(1) : e).sort()
}
const obj = {
site: "Codewars",
description: "Lorem ipsum dolor sit...",
obj2: {
str: "Yeah, Codewars!",
num: 123,
obj3: {
something: "Ph'nglui mglw'nafh Codewars R'lyeh wgah'nagl fhtagn. Gotha fm'latgh h'gof'nn, geb chtenff"
}
}
};
console.log(search(obj, 'Codewars')) // results ==>> [ 'obj2.obj3.something', 'obj2.str', 'site' ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505879.html
標籤:javascript 算法 递归
上一篇:使用Python,如何將串列中的所有匹配整數相乘,然后將剩余的整數相加
下一篇:資料的持久磁區
