Мне нравится ответ @ VictorNascimento, но, применяя map
, затем filter
, каждый список children
будет повторяться дважды. Вот альтернатива с reduce
, чтобы избежать этого:
function removeFromTree(node, name) {
return node.name == name
? undefined
: {
...node,
children: node.children.reduce(
(children, child) => children.concat(removeFromTree (child, name) || []), [])
}
}
В случае, если вам нужен способ удаления элементов на месте, как предложил @ggorlen, я бы порекомендовал следующее решение, которое На мой взгляд проще:
function removeFromTree(node, name) {
if (node.name == name) {
node = undefined
} else {
node.children.forEach((child, id) => {
if (!removeFromTree(child, name)) node.children.splice(id, 1)
})
}
return node
}
В пакете debian есть пакет bluez-utils
. Он содержит несколько инструментов командной строки:
$ hcitool dev
выведет список устройствМогут существовать команды для отправки, получения и т.д... от/к Bluetooth-устройствам.