是否需要在javascript中映射之前检查数组的长度?

时间:2018-10-11 21:59:35

标签: javascript arrays arrow-functions

所以我用ES6编写了这段代码

 let documents = somedata;
      if (documents.length >= 0) {
          documents.map( (item, index) => {
              state[item.type].push(item);
          });
          this.setState({documents: state});
      }

并且我正在尝试对其进行优化,我是否需要在声明映射之前检查数组的长度,什么是处理错误检查的更好方法?

就像在某些情况下,不检查长度会不好吗?

如果变量不是数组,它将失败,但是除了我应该担心的还有其他情况吗?

2 个答案:

答案 0 :(得分:1)

否,[]。map(item => item)只会返回[],因此如果长度为0,就可以了。

如果您只是检查变量是否为数组,则可以参考以下问题: https://medium.com/@mrpowers/how-to-write-spark-etl-processes-df01b0c1bec9

并且由于以下任何原因也可能失败

  • 您的一个数组元素不是具有'type'属性的对象
  • 您的状态对象没有与item.type值相对应的键
  • 如果state [item.type]值不是数组(因此没有push方法)

此外,如果您不使用地图的结果,请不要使用地图,请使用How do you check if a variable is an array in JavaScript?

答案 1 :(得分:0)

好吧。实际上,您应该检查文档在原型跟踪中是否具有length属性。如果没有,您尝试在其中使用map,它将引发一个错误。

当您保证有长度(可迭代)时,长度可以为零没有问题。因为您没有元素,所以不会迭代任何内容。因此,将返回一个空数组。