Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
201 views
in Technique[技术] by (71.8m points)

javascript - Check for empty value in a nested object

I have a data array as given below

 let data = [{ id: 1, name: '', children: [{ id: 11, name: '', children: [] }, { id: 12, name: '', children: [{ id: 121, name: '', children: [] }, { id: 122, name: '', children: [] }] }, 
{ id: 2, name: '', children: [{ id: 21, name: '', children: [] }, { id: 22, name: '', children: [{ id: 221, name: '', children: [] }, { id: 222, name: '', children: [] }] } ] } ];

So the above data can extend upto 'n-levels' so in my vue template I have defined a recursive method called validateNodes which is used to check if any of the object at any level has an empty name (ie) name: ''. If yes then it should return false else return true.

validateNodes(tree) {
      if (tree.length) {
        return tree.forEach((elem) => {
          if (elem.name === "") return false;
          return elem.children.length > 0
            ? this.validateNodes(elem.children)
            : true;
        });
      } else {
        return true;
      }
},
validateWbs() {
 let data = ....(value specified above);
 const valid = this.validateNodes(data);
 console.log(valid);
 }

But I don't know due to some reason when I print the 'valid' in console its gives be undefined. Please help me fix this.

Thanks in advance


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You do not realy use the result of a nested array.

Instead you could check with Array#every and respect nested children.

function validateNodes(tree) {
    return tree.every(node =>
        node.name &&
        (!node.children.length || validateNodes(node.children))
    );
}

const data = [{ id: 1, name: '', children: [{ id: 11, name: '', children: [] }, { id: 12, name: '', children: [{ id: 121, name: '', children: [] }, { id: 122, name: '', children: [] }] }, { id: 2, name: '', children: [{ id: 21, name: '', children: [] }, { id: 22, name: '', children: [{ id: 221, name: '', children: [] }, { id: 222, name: '', children: [] }] }] }] }];

console.log(validateNodes([]));
console.log(validateNodes([{ id: 1, name: 'someName', children: [] }]));
console.log(validateNodes([{ id: 1, name: '', children: [] }]));
console.log(validateNodes(data));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.6k users

...