Я работаю над визуализацией d3, чтобы создать солнечный заряд. Я также добавляю функциональность для поиска определенной дуги, чтобы солнечный свет отображал дуги только с искомой меткой. Если исходный объект:Как фильтровать объект JavaScript на основе состояния свойства?
{
"name": "root",
"children": [
{
"name": "A",
"color": "red",
"children": [
{
"name": "B",
"color": "red"
}
]
},
{
"name": "C",
"color": "red",
"children": [
{
"name": "D",
"color": "red"
}
]
},
{
"name": "E",
"color": "red",
"children": [
{
"name": "B",
"color": "red"
}
]
}
]
}
Я хотел бы, чтобы фильтровать это таким образом, что он возвращает всю иерархию, которая содержит искомое имя в любом месте в иерархии. Ниже приведен образец, необходимый для поиска «имени»: «B»
{
"name": "root",
"children": [
{
"name": "A",
"color": "red",
"children": [
{
"name": "B",
"color": "red"
}
]
},
{
"name": "E",
"color": "red",
"children": [
{
"name": "B",
"color": "red"
}
]
}
]
}
Скажите, пожалуйста, если что-нибудь еще может понадобиться. Спасибо.
Фрагмент кода, как я пытался фильтровать.
var path = svg.selectAll("path")
.data(partition.nodes(root))
.enter()
.append("path")
.filter(function(d){
return (d.name=="B");
})
.attr("d", arc)
.style("fill", function(d) {
console.log(d.name);
return color((d.children ? d : d.parent).name);
})
Это возвращает только «имя»: дугу «В», а не иерархию.
Я пробовал реализовать это. Спасибо за предложение. Тем не менее, я столкнулся с ошибкой при попытке реализовать то же самое. Ссылка для jsfiddle: http://jsfiddle.net/Claw_22/vw611nx8/2/. При изучении я обнаружил, что вход должен быть в формате массива для функции сращивания. Теперь я смотрю, как я могу сделать это преобразование. – Claw
упс! Эта строка должна быть данными.children.splice (я, 1). Мы пытаемся удалить одного из детей. Дети - это массив, и поэтому сращивание должно работать. Я отредактирую свой ответ, чтобы отразить это изменение. –
Протестировано после изменения. Он работает на моем конце, и иерархия поддерживается после необходимых удалений. Дайте мне знать, если это сработает и для вас. Ура! –