Свен, большое спасибо. В конце концов, я нашел другой путь, но это очень полезно, и я отметил как таковой.
его источника данных я получаю такие значения, как;
USA |Arizona
USA |Florida
UK |England |Northamptonshire
UK |England |Derbyshire
UK |Wales |Powys
Switzerland|Lucern
Это простые текстовые значения, которые повторяются в столбце.
Мне нужно встроить их динамически во вложенный массив
source: [
{title: "USA", children: [
{title: "Arizona"},
{title: "Florida"}
]}
],
Согласноhttps://github.com/mar10/fancytree/wiki/TutorialLoadData
К сожалению, мой мозг перестал работать сегодня, я не вижу элегантного пути.
Любые указатели будут оценены с благодарностью.
Так что я решил это в конце концов, используя сообщение от Оскара
function getNestedChildren(arr, parent) {
var out = []
for(var i in arr) {
if(arr[i].parent == parent) {
var children = getNestedChildren(arr, arr[i].id)
if(children.length) {
arr[i].children = children
}
out.push(arr[i])
}
}
return out
}
http://oskarhane.com/create-a-nested-array-recursively-in-javascript/
Это создает вложенный массив.
Для обеспечения наличия предполагаемых значений (например, США, которая находится в иерархии, но не является уникальным значением).
var CountryArray = CountryText.split("|");
// Variables to hold details of each section of the Country path being iterated
var CountryId = '';
var CountryParentPrefix = '';
var CountryParent = '';
// Iterate each section of the delimeted Country path and ensure that it is in the array
for(var i in CountryArray)
{
var CountryId = CountryParentPrefix+CountryArray[i];
// Find the Country id in the array / add if necessary
var result = FlatSource.filter(function (Country) { return Country.id == CountryId });
if (result.length == 0) {
// If the Country is not there then we should add it
var arrCountry = {title:CountryArray[i], parent:CountryParent, id:CountryId};
FlatSource.push(arrCountry);
}
// For the next path of the heirarchy
CountryParent = CountryId;
CountryParentPrefix = CountryId+'|';
}
Я не использовал предложение Свена, но подозреваю, что оно одинаково справедливо.