在我的node.js 6.10
应用中,我试图在我的数组中识别如下:
[
[
[]
],
[]
]
这种嵌套可以进入n级,并且可以在任何级别的数组中包含元素。我怎样才能做到这一点?感谢
P.S。我知道我可以使用n级for循环来实现它,但是想知道更优化的解决方案。
答案 0 :(得分:8)
单行:
let isEmpty = a => Array.isArray(a) && a.every(isEmpty);
//
let zz = [
[
[]
],
[],
[[[[[[]]]]]]
]
console.log(isEmpty(zz))

如果你想知道它是如何工作的,请记住任何关于空集的陈述都是真的(" vacuous truth"),因此a.every(isEmpty)
对于空数组和数组都是正确的只包含空数组。
答案 1 :(得分:0)
是,
你需要的只是编写递归函数,在它的路上检查array.length
属性。
类似的东西:
function isEmpty(arr) {
let result = true;
for (let el of arr) {
if (Array.isArray(el)) {
result = isEmpty(el);
} else {
return false;
}
}
return result;
}
您可以考虑使用lodash:https://lodash.com/docs/#flattenDeep
答案 2 :(得分:0)
你可以这样做:
class Child extends React.Component {
constructor(props){
super(props);
}
render() {
return (
<div><p>I said {this.props.greeting} {this.props.count} times</p>
</div>
);
}
}
class Parent extends React.Component {
constructor() {
super();
this.state = {
count: 0,
greeting: "Hello"
};
}
sayHello() {
this.setState((prevState, props) => {
return {
count: prevState.count + 1,
greeting: "Hello"
}
}
)};
sayGoodBye() {
this.setState((prevState, props) => {
return {
count: this.count = 1,
greeting: "Goodbye"
}
}
)};
render() {
return (
<div>
<button onClick={() => this.sayHello() }>Say Hello</button>
<button onClick={() => this.sayGoodBye() }>Say Goodbye</button>
<Child count={this.state.count} greeting={this.state.greeting} />
</div>
)
}
}
ReactDOM.render(<Parent />, document.getElementById('app'));
答案 3 :(得分:-1)
另一个使用concat
的紧凑型解决方案:
[].concat.apply([], [[], [], []]).length; // 0