如何检查数组是否是Javascript中的空数组数组

时间:2017-06-16 10:06:38

标签: javascript arrays node.js multidimensional-array

在我的node.js 6.10应用中,我试图在我的数组中识别如下:

[
    [
        []
    ],
    []
]

这种嵌套可以进入n级,并且可以在任何级别的数组中包含元素。我怎样才能做到这一点?感谢

P.S。我知道我可以使用n级for循环来实现它,但是想知道更优化的解决方案。

4 个答案:

答案 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