Javascript - l oop через массив для отношений - PullRequest
0 голосов
/ 01 августа 2020

Я не знаю, как правильно задать вопрос, но, по сути, у меня есть массив идентификаторов отношений (предшественник и преемник), и я хочу oop через него и получить преемники на основе предшественника. Я буду искать. Но сложная часть заключается в том, что я также хочу получить successorId (s) SuccessorId (s), пока не останется никаких преемников. Ниже приведен пример контекста, который я хочу достичь:

var sampleArray = [
{
    "predecessorId":"01",
    "successorId":"02"
},{
    "predecessorId":"01",
    "successorId":"03"
},{
    "predecessorId":"02",
    "successorId":"04"
},{
    "predecessorId":"04",
    "successorId":"05"
},{
    "predecessorId":"06",
    "successorId":"07"
}]

Если я хочу получить ДЕРЕВО, преемников предшественника «01» на основе образца массива, возврат должен быть:

" 02 »- потому что это прямой преемник« 01 »

« 03 »- потому что это прямой преемник« 01 »

« 04 »- потому что это косвенный преемник« 01 » но прямой преемник «02»

«05» - потому что это косвенный преемник «01», но прямой преемник «04»

Дайте мне знать, если мой вопрос нечеткий. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Это то, что вы хотели

var sampleArray = [
{
    "predecessorId":"01",
    "successorId":"02"
},{
    "predecessorId":"01",
    "successorId":"03"
},{
    "predecessorId":"02",
    "successorId":"04"
},{
    "predecessorId":"04",
    "successorId":"05"
},{
    "predecessorId":"06",
    "successorId":"07"
}]
let arrMap={}
sampleArray.forEach(itm=>{
arrMap[itm.predecessorId]?arrMap[itm.predecessorId].push(itm.successorId):arrMap[itm.predecessorId]=[itm.successorId]
})
let successor=[]
const findSuccessor=(arr)=>{
if(!arr)
return 
arr.forEach(val=>{
successor.push(val)
findSuccessor(arrMap[val])
})
}
findSuccessor(arrMap["01"])
console.log(successor.sort())

Logi c: сначала создайте карту всех predecessorId т.е. {"01":[],"02":[],"04":[],"06":[]}, которая сохранит свои successorId в массиве.

Затем рекурсивно найдите всех прямых и косвенных преемников, используя findSuccessor

0 голосов
/ 01 августа 2020

Я могу только думать об этом:

var sampleArray = [
{
    "predecessorId":"01",
    "successorId":"02"
},{
    "predecessorId":"01",
    "successorId":"03"
},{
    "predecessorId":"02",
    "successorId":"04"
},{
    "predecessorId":"04",
    "successorId":"05"
},{
    "predecessorId":"06",
    "successorId":"07"
}];

var pre_id = "01";
var result = [];

result = sampleArray.filter(x => x.predecessorId === pre_id)
                    .map(x => x.successorId);

for (var item of result) {
  var temp = sampleArray.filter(x => x.predecessorId === item);
  if (temp.length > 0) {
    result.push(temp[0].successorId);
  }
}

console.log(result);

Правило: Получение successorId значений на основе predecessorId. Затем, исходя из результата, делаем al oop, чтобы получить еще successorId из sampleArray

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...