У меня есть объект JSON, я хочу найти идентификатор со значением индекса родителя - PullRequest
0 голосов
/ 28 июня 2018

Извините, если вас трудно понять.

У меня есть объект, и я хочу найти subSiteId, где значение равно 11909, и я также хочу получить результат со значением индекса объекта родителя.

Пример 1: в моем случае мой subSiteId == 11909 находится внутри индекса свойства элементов, равного 1, поэтому мой результат должен быть таким: 1_0

Пример 2: в моем случае мой subSiteId == 11999 позиций в индексе свойств элементов, равный 3, поэтому мой результат должен быть примерно таким: 3_1

 let obj =[
{
    "subSiteName": "7391 - Belt Line",
    "subSiteId": 1132,
    "SiteId": 1132,
    "items": [
        {
            "subSiteId": 11906,
            "parentId": 0,
            "subSiteName": "Sub Sites 1",
            "hasChildren": true,
            "items": []
        },
        {
            "subSiteId": 11908,
            "parentId": 0,
            "subSiteName": "Sub Sites 2",
            "hasChildren": true,
            "items": [
                {
                    "subSiteId": 11909,
                    "parentId": 11908,
                    "subSiteName": "Sub Sites 3",
                    "hasChildren": false
                }
            ],
            "isVisited": true
        },
        {
            "subSiteId": 11910,
            "parentId": 0,
            "subSiteName": "Sub Sites 4",
            "hasChildren": true,
            "items": []
        },
        {
            "subSiteId": 11914,
            "parentId": 0,
            "subSiteName": "Building",
            "hasChildren": false,
            "items": [
                {
                    "subSiteId": 11200,
                    "parentId": 11908,
                    "subSiteName": "Sub Sites 14",
                    "hasChildren": false
                },
                {
                    "subSiteId": 11999,
                    "parentId": 11908,
                    "subSiteName": "Sub Sites 14",
                    "hasChildren": false
                }
            ]
        }
    ]
}
]

Я пытался с кодом:

    subSiteActive(obj, id){
      let itemIndex:string = '0';

     if(obj.items){
    //while(result > 0){
    for(let i = 0; i < obj.items.length; i++){
      if(obj.items[i].subSiteId === id){
        console.log(obj.items, i)
          itemIndex+= '_'+i;
          this.result = true;
          break;
        }else{
          if(!this.result){
            this.subSiteActive(obj.items[i], id)
          }
        }
      }
    return itemIndex;
    //}
    } 
   }
   this.subSiteActive(obj, 11909)

1 Ответ

0 голосов
/ 28 июня 2018

Попробуйте это

 let obj =[
{
    "subSiteName": "7391 - Belt Line",
    "subSiteId": 1132,
    "SiteId": 1132,
    "items": [
        {
            "subSiteId": 11906,
            "parentId": 0,
            "subSiteName": "Sub Sites 1",
            "hasChildren": true,
            "items": []
        },
        {
            "subSiteId": 11908,
            "parentId": 0,
            "subSiteName": "Sub Sites 2",
            "hasChildren": true,
            "items": [
                {
                    "subSiteId": 11909,
                    "parentId": 11908,
                    "subSiteName": "Sub Sites 3",
                    "hasChildren": false
                }
            ],
            "isVisited": true
        },
        {
            "subSiteId": 11910,
            "parentId": 0,
            "subSiteName": "Sub Sites 4",
            "hasChildren": true,
            "items": []
        },
        {
            "subSiteId": 11914,
            "parentId": 0,
            "subSiteName": "Building",
            "hasChildren": false,
            "items": [
                {
                    "subSiteId": 11200,
                    "parentId": 11908,
                    "subSiteName": "Sub Sites 14",
                    "hasChildren": false
                },
                {
                    "subSiteId": 11999,
                    "parentId": 11908,
                    "subSiteName": "Sub Sites 14",
                    "hasChildren": false
                }
            ]
        }
    ]
}
]

var result={};

obj.map(function(ob){
    var f;
	ob.items.forEach(function(item, index){
    item.items.some(function(it, i){
      f =i;
      return item.subSiteId == 11999;
    });
    result = {
        pIndex: index,
        cIndex: f
    };
  });
});
console.log(result);
...