gpt4 book ai didi

javascript - 查找作为该对象的直接或间接子对象的对象数量的有效方法是什么

转载 作者:行者123 更新时间:2023-11-28 03:48:04 25 4
gpt4 key购买 nike

JavaScript 对象数组,例如:让对象数组 =

[
{ id: 0, parentId: null},
{ id: 4, parentId: 3},
{ id: 1, parentId: 0},
{ id: 3, parentId: 2},
{ id: 2, parentId: 0}
]

其中,parentId 当不为 null 时,引用数组中 id =parentId 的另一个对象。这些对象形成了一种可以像树一样可视化的关系:

enter image description here

我们必须在 JS 中创建一个函数,给定一个 id,返回该对象的直接或间接子对象的数量。例如,如果函数被赋予值 3,则应返回 1,如果函数被赋予值 0,则应返回 4。

我尝试过的,

var count = 0;
var selected = [];

let objectArray = [
{ id: 0, parentId: null},
{ id: 4, parentId: 3},
{ id: 1, parentId: 0},
{ id: 3, parentId: 2},
{ id: 2, parentId: 0}
];


var factorial = function(objectArray, selected, num) {
// console.log('5 - Array = ', Array );
console.log('6 - selected = ', selected );
// do stuff here

for (var i = 0; i < objectArray.length; i++) {
console.log('19 - num = ', num );
console.log('20 - i =', i, objectArray[i] );
console.log('21- parent_id =', i, objectArray[i].parentId );

if ( objectArray[i].parentId === num ) {
console.log(' yes with num =', num );
count = count + 1;
selected.push(objectArray[i]);

// selected.pop(selected[i]);

console.log(' 18- count = ', count );
}
console.log('20 ============ done =========== i= ', i );

console.log(' ============ selected ==== ', selected );
console.log('25 ============ count =========== ', count );
}


// if (selected.length >= 0 ) { // terminal case
if ( selected.length == 0 ) { // terminal case
// if ( count >= 6 ) {
console.log('29- %%%%%%%%%%%% if selected.length =', selected.length);
console.log('29- %%%%%%%%%%%% if count %%%%%%%%% ', count );
return count;
} else { // block to execute
console.log(' ****** in else -- now calling Selected Arr ******');


for (var i = 0; i < selected.length; i++) {
console.log( '52- selected[i].id =', selected[i] );
factorial (objectArray, selected, selected[i].id );
}

// return ( factorial (objectArray, selected, num ));
}

};



factorial(objectArray, selected, 0);

最佳答案

您可以尝试这种方法,从给定对象创建 map 并添加父级和子级。从结果对象中找到 childCount 如下:

var rels = [
{ id: 0, parentId: null},
{ id: 4, parentId: 3},
{ id: 1, parentId: 0},
{ id: 3, parentId: 2},
{ id: 2, parentId: 0}
];

// create a map of nodes
var nodeMap = distinct(rels);
nodeMap = graph(rels, nodeMap); // update parent and children

childCount(3, nodeMap);
childCount(0, nodeMap);

function distinct(nodes){
return nodes.reduce(function(prev, curr){
prev[curr.id] = {id:curr.id, parent:null, children:[]}
return prev;
}, {});
}

function graph(nodes, nodeMap){
nodes.forEach(function(node){
if (node.parentId !== null) {
var parentNode = nodeMap[node.parentId]
var childNode = nodeMap[node.id];

console.log(parentNode, childNode)

childNode.parent = parentNode;
parentNode.children.push(childNode);
}
});

return nodeMap;
}

function childCount(id, nodeMap){
var node = nodeMap[id];

console.log('cc', id, node);

return node.children.reduce(function(prev, curr){
return prev + childCount(curr.id, nodeMap)
},
node.children.length);
}

关于javascript - 查找作为该对象的直接或间接子对象的对象数量的有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48273527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com