liujieaipojie 发表于 2022-9-9 07:16

关于JS数组some的一个写法

直入主题,some() 方法用于检测数组中的元素是否满足指定条件(函数提供)
语法是这样的:array.some(function(currentValue,index,arr),thisValue)
我写了一个关于数组扁平化flat的demo如下:


<script>
      function flat(arr){
            const isDeep = arr.some(item =>item instanceof Array)
            console.log(isDeep)
            if(!isDeep){
                return arr
            }
            const res = Array.prototype.concat.apply([],arr)
            return flat(res)
      }

      const res = flat(,,45,6],6])
      console.log(res)
    </script>
我上面这样写得出的结果是正常的,但是代码中我多加了一个花括号(红色字体),打印出的结果就不对了,像这样:
const isDeep = arr.some(item =>{item instanceof Array})


我找了好久原因才发现是这里加的括号导致的,这个就是一个函数的简写呀,为啥结果不一样。本人才学js不久,大佬如果看到见笑了,别嫌弃俺菜,希望得到大佬的解析,我也能取个经学习学习,我不怕嘲笑,只要大佬愿意教,我就学

yue_tai_mei 发表于 2022-9-9 07:28

这个是箭头函数,你加了这个花括号后,它把花括号里面的代码当成了是函数的执行体,里面代码执行了,但是没有返回值,返回就是undefined;如果你去掉了花括号,它就是一种简写,把item instanceof Array的值作为返回值。

如果你要加花括号,你需要这个样写:
arr.some(item =>{
return item instanceof Array
})

liujieaipojie 发表于 2022-9-9 07:34

yue_tai_mei 发表于 2022-9-9 07:28
这个是箭头函数,你加了这个花括号后,它把花括号里面的代码当成了是函数的执行体,里面代码执行了,但是没 ...

妙蛙,简洁明了。明白了明白了,感谢感谢。{:1_919:}大佬早上好

Justin0110 发表于 2022-9-9 09:10

你这个问的应该是 函数表达式简写的问题

wjc 发表于 2022-9-9 12:01

有用的。。
页: [1]
查看完整版本: 关于JS数组some的一个写法