我正在努力解決這個演算法。我知道解決方案將是遞回的,但我對如何解決這個問題感到困惑。隨意嘗試一下。謝謝
問題:['a','b','c',['d','e','f',['g','h']],[i,j,k]]
Output:
{
a: true,
b: true,
c: true,
d: {
e: true,
f: true,
g: {
h: true
}
},
i: {
j: true,
k: true
}
}
uj5u.com熱心網友回復:
您可以使用Object.fromEntries并提供鍵/值對。當“key”恰好是一個陣列時,將第一個元素作為key,對陣列的剩余部分進行遞回,得到value部分:
const toObject = arr =>
Object.fromEntries(arr.map(item => Array.isArray(item)
? [item[0], toObject(item.slice(1))]
: [item, true]
));
const arr = ["a", "b", "c", ["d", "e", "f", ["g", "h"]], ["i", "j", "k"]];
const result = toObject(arr);
console.log(result);
uj5u.com熱心網友回復:
使用Array#reduce:
const convert = (arr = []) =>
arr.reduce((acc, e) => {
if (Array.isArray(e)) {
const [k, ...sub] = e;
acc[k] = convert(sub);
} else {
acc[e] = true;
}
return acc;
}, {});
console.log(
convert(["a", "b", "c", ["d", "e", "f", ["g", "h"]], ["i", "j", "k"]])
);
uj5u.com熱心網友回復:
在 Ruby 中(想想偽代碼)。
def recurse(arr)
arr.each_with_object({}) do |e,h|
case e
when String
h[e.to_sym] = true
else # Array
h[e.first.to_sym] = recurse(e.drop(1))
end
end
end
假設(與有問題的示例略有不同)
arr = ['a','b','c',['d','e','f',['g','h', ['m', 'n']]], ['i', 'j', 'k']]
然后
recurse arr
#=> {
# :a=>true,
# :b=>true,
# :c=>true,
# :d=> {
# :e=>true,
# :f=>true,
# :g=>{
# :h=>true,
# :m=>{
# :n=>true
# }
# }
# },
# :i=>{
# :j=>true,
# :k=>true
# }
# }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436826.html
標籤:javascript 数组 算法 目的 javascript 对象
