javaScript

javascript -- 判断是否相同重复添加数据

2019-03-22  本文已影响47人  反者道之动001

相同数据判断,看起来很简单的问题,但是也有一番故事,请听我慢慢道来。

最开始,以为不就是判断是否重复而已

ES6不是吃饭的,一行代码解决问题

if(原数据.map(e => e.name).includes( 当前输入的值)){
            // 错误提示CODE
            return
}

添加一个数据,试下,好像没问题,但是编辑的时候好像校验不通过。于是编辑需要特殊处理。

代码顺手就来

var isSameVal = (_arr, val) => {
        let arr = JSON.parse(JSON.stringify(_arr))
        arr.push(val)
        let s = [...new Set(arr)]
        return (JSON.stringify(_arr) === JSON.stringify(s))
      }

天真以为可以了,但是,发现,添加了一条数据,发现数据检验失败??

一看,之前的数据是有重复,这个校验是校验全部的,这样会出问题的,会被测试提BUG的, 我们要宽容一点,对之前的错误不急于追究。

那就只对一个数据修改

于是代码改了一下


var isSameNowVal = (_arr, val) => {
        let i = 0
        _arr.forEach((e, _index) => {
          if(e == val){
            i += 1
          }
        })
        return  i >= 1
      }

然后测试一下, 咦,好像可以,但是问题,我编辑的时候,好像不通过?

哦,原来编辑的时候,代码并不能知道这是添加还是编辑。

于是来了一个新的思路,把每一次相同的位置记录下来并返回回去,然后再判断下当前的位置是不是再这个范围里面。

于是改下代码

var isSameNowVal = (_arr, val) => {
        let i = 0
        let indexs = []
        _arr.forEach((e, _index) => {
          if(e == val){
            i += 1
            indexs.push(_index)
          }
        })
        return {
          bool: i >= 1, 
          indexs
        }

判断的时候

if(same.bool){
          //不是修改同一个地方
          if(!same.indexs.includes(index)){
            // 提示
            return
          }
        }

这样就可以了。

--END--

上一篇下一篇

猜你喜欢

热点阅读