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