Javascript 查找具有特定值的对象
我有一个树结构的对象,例如Javascript 查找具有特定值的对象,javascript,object,Javascript,Object,我有一个树结构的对象,例如 var x = [{ id: 1, children: [{ id: 11, children: [], }, { id: 12, children: [{ id: 121, name:'jogn', children: [] }] }] }, { id: 2, children: [], }] 我想在其中找到具有特定ID的对象。我做了 function printO
var x = [{
id: 1,
children: [{
id: 11,
children: [],
}, {
id: 12,
children: [{
id: 121,
name:'jogn',
children: []
}]
}]
}, {
id: 2,
children: [],
}]
我想在其中找到具有特定ID的对象。我做了
function printObj(obj , val) {
for( var i = 0; i < obj.length ; i++){
if( obj[i].id == val){
return obj[i];
}
if( obj[i].children.length > 0 ){
printObj( obj[i].children)
}
}
}
当我弹出一些警报时,它返回undefined而不是jogn Altound,如果它找到了设置值,它就会找到它。为什么它返回了错误的对象?这行有两个问题:
printObj( obj[i].children);
g.name
位置查找x.name
固定的:
var x=[{
id:1,
儿童:[{
id:11,
儿童:[],
}, {
id:12,
儿童:[{
id:121,
名称:“jogn”,
儿童:[]
}]
}]
}, {
id:2,
儿童:[],
}];
函数printObj(obj,val){
对于(变量i=0;i0){
var possibleResult=printObj(obj[i].子对象,val);
如果(可能结果){
返回可能结果;
}
}
}
}
var g=printObj(x,121);
console.log(g.name)代码>此行有两个问题:
printObj( obj[i].children);
它缺少了第二个论点
如果找到结果,则需要返回结果
所以
另外,在您的测试中,您在您想要的g.name
位置查找x.name
固定的:
var x=[{
id:1,
儿童:[{
id:11,
儿童:[],
}, {
id:12,
儿童:[{
id:121,
名称:“jogn”,
儿童:[]
}]
}]
}, {
id:2,
儿童:[],
}];
函数printObj(obj,val){
对于(变量i=0;i0){
var possibleResult=printObj(obj[i].子对象,val);
如果(可能结果){
返回可能结果;
}
}
}
}
var g=printObj(x,121);
console.log(g.name)代码>对于函数方法中的对象和列表工作非常有用-下面是您遍历的数据-
var x = [{
id: 1,
children: [{
id: 11,
children: [],
}, {
id: 12,
children: [{
id: 121,
name: 'jogn',
children: []
}]
}]
}, {
id: 2,
children: [],
}]
const findById = (id, list) => map(o => {
if(o.id === id) return o
return findById(id, o.children)
}, list)
head(flatten(findById(121, x)))
变量x=[{
id:1,
儿童:[{
id:11,
儿童:[],
}, {
id:12,
儿童:[{
id:121,
名称:“jogn”,
儿童:[]
}]
}]
}, {
id:2,
儿童:[],
}]
const findById=(id,list)=>map(o=>{
如果(o.id==id)返回o
返回findById(id,o.children)
},列表)
头部(展平(findById(121,x)))
对于从函数方法进行对象和列表工作来说,这是一个很好的选择——下面是您所遍历的数据-
var x = [{
id: 1,
children: [{
id: 11,
children: [],
}, {
id: 12,
children: [{
id: 121,
name: 'jogn',
children: []
}]
}]
}, {
id: 2,
children: [],
}]
const findById = (id, list) => map(o => {
if(o.id === id) return o
return findById(id, o.children)
}, list)
head(flatten(findById(121, x)))
变量x=[{
id:1,
儿童:[{
id:11,
儿童:[],
}, {
id:12,
儿童:[{
id:121,
名称:“jogn”,
儿童:[]
}]
}]
}, {
id:2,
儿童:[],
}]
const findById=(id,list)=>map(o=>{
如果(o.id==id)返回o
返回findById(id,o.children)
},列表)
头部(展平(findById(121,x)))
如果您提醒g.name
而不是x
,会怎么样?另外,您不会从printObj(子对象)返回任何内容,因此递归结果将消失。如果您提醒g.name
而不是x
,会怎么样?此外,您不会从printObj(子对象)返回任何内容,因此递归结果将消失。