JS代码:

// 定义数据集合
const persons = [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' }
]
console.log('')
console.log('初始化数据为:', JSON.stringify(persons))
console.log('') // --------- 设定场景1 -> 新增时存在相同姓名 ---------
console.log('-------------------场景1-------------------')
// 新增状态id为-1,验证后重新在前端生成一个id,或者由后台生成
let person1 = { id: -1, name: '张三' }
// 验证
let verifyObj1 = persons.find(item => item.name === person1.name &&
item.id !== person1.id)
// 如果找到相同对象,则不允许添加
if (verifyObj1) {
console.log('存在相同姓名,新增失败')
console.log('场景1结果:', JSON.stringify(persons))
} else {
// 通过验证,允许新增
persons.push(person1)
console.log('场景1结果:', JSON.stringify(persons))
}
console.log('-------------------场景1-------------------')
console.log('') // --------- 设定场景2 -> 新增时不存在相同姓名 ---------
console.log('-------------------场景2-------------------')
// 新增状态id为-1,验证后重新在前端生成一个id,或者由后台生成
person1 = { id: -1, name: '马六' }
// 验证
verifyObj1 = persons.find(item => item.name === person1.name &&
item.id !== person1.id)
// 如果找到相同对象,则不允许添加
if (verifyObj1) {
console.log('存在相同姓名,新增失败')
console.log('场景2结果:', JSON.stringify(persons))
} else {
person1.id = persons.length + 1 // ID自增
// 通过验证,允许新增
persons.push(person1)
console.log('场景2结果:', JSON.stringify(persons))
}
console.log('-------------------场景2-------------------')
console.log('') // --------- 设定场景3 -> 编辑时存在相同姓名 ---------
console.log('-------------------场景3-------------------')
// 编辑状态id为实际的编辑对象id
let personIndex = 0 // 假设编辑张三
let person2 = persons[personIndex]
person2.name = '李四'
// 验证
let verifyObj2 = persons.find(item => item.name === person2.name &&
item.id !== person2.id)
// 如果找到相同对象,则不允许修改
if (verifyObj2) {
console.log('存在相同姓名,修改失败')
console.log('场景3结果:', JSON.stringify(persons))
} else {
// 通过验证,允许修改
persons[personIndex] = person2
console.log('场景3结果:', JSON.stringify(persons))
}
console.log('-------------------场景3-------------------')
console.log('') // --------- 设定场景4 -> 编辑时不存在相同姓名 ---------
console.log('-------------------场景4-------------------')
// 编辑状态id为实际的编辑对象id
personIndex = 0 // 假设编辑张三
person2 = persons[personIndex]
person2.name = '王五'
// 验证
verifyObj2 = persons.find(item => item.name === person2.name &&
item.id !== person2.id)
// 如果找到相同对象,则不允许修改
if (verifyObj2) {
console.log('存在相同姓名,修改失败')
console.log('场景4结果:', JSON.stringify(persons))
} else {
// 通过验证,允许修改
persons[personIndex] = person2
console.log('场景4结果:', JSON.stringify(persons))
}
console.log('-------------------场景4-------------------')
console.log('')

运行结果:

js对象数组新增、修改时的验证是否重复的逻辑的更多相关文章

  1. JS对象—数组总结(创建、属性、方法)

    JS对象—数组总结(创建.属性.方法) 1.创建字符串 1.1 new Array() var arr1 = new Array(); var arr2 = new Array(6); 数组的长度为6 ...

  2. js对象数组多字段排序

    来源:js对象数组按照多个字段进行排序 一.数组排序 Array.sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序. 一般用法:(数组元素从小大进行排序) var a = ...

  3. 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

    前台的js对象数组传到后台处理.在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

  4. js对象数组中的某属性值 拼接成字符串

    js对象数组中的某属性值 拼接成字符串 var objs=[ {id:1,name:'张三'}, {id:2,name:'李四'}, {id:3,name:'王五'}, {id:4,name:'赵六' ...

  5. vue中,对象数组多层嵌套时,更新数据更新页面

    vue中的对象和数组的元素直接赋值修改时,是不能响应到view中去的 1.对象更新 this.a={title:'列表1’}; this.a.title='列表2’; <h1>{{a.ti ...

  6. js对象,数组,字符串的操作

    循环绑定=>变量污染 for (var i = 0;i<lis.length;i++){ lis[i].index = i;#给页面元素对象添加一个任意属性(保留索引的属性index) # ...

  7. JS 对象 数组求并集,交集和差集

    一.JS数组求并集,交集和差集 需求场景 最近,自己项目中有一些数组操作,涉及到一些数学集的运算,趁着完成后总结一下. 简化问题之后,现有两数组a = [1, 2, 3],b = [2, 4, 5], ...

  8. js对象/数组深度复制

    今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...

  9. js对象数组深度去重和深度排序

    使用collect.js处理数组和对象 https://github.com/ecrmnn/collect.js/# 引入collect.js https://github.com/ecrmnn/co ...

随机推荐

  1. 使用AOP获取自定义注解的内容

    目录结构: 一:自定义注解 package org.example.annotation; import java.lang.annotation.ElementType; import java.l ...

  2. PHP stristr() 函数

    实例 查找 "world" 在 "Hello world!" 中的第一次出现,并返回字符串的剩余部分: <?php高佣联盟 www.cgewang.com ...

  3. luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索

    LINK:聪聪与可可 这道题的核心是 想到如何统计答案. 如果设f[i][j]表示第i个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做. 两者的位置都在变化 所以需要 ...

  4. 移动物体监控系统-sprint1声音报警子系统

    一.声卡驱动开发 1.1 声卡驱动架构 ——OSS开放式音频系统,声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好,因为产生了ALSA ——AlSA Linux系统高级音频 ...

  5. Netty(一):的入门使用。

    Netty的入门基本使用流程代码,不做具体分析.使用版本为Netty 4.x版本. 服务端调用示例: 绑定端口号为8080端口 package com.cllover; import com.sun. ...

  6. CentOS7 安装 Nexus

    CentOS7 安装 Nexus 所需软件包 jdk-8u231-linux-x64.tar.gz nexus-3.24.0-02-unix.tar.gz 创建安装目录 mkdir -p /opt/n ...

  7. 2020-07-14:es用过冷热分离吗?假如现在有些数据热变冷,有些数据冷变热,怎么解决?

    福哥答案2020-07-14: 热变冷: 有x台机器tag设置为hot. 有y台机器tag设置为cool. hot集群中只存最近两天的. 有一个定时任务每天将前一天的索引标记为cool. es看到有新 ...

  8. C#设计模式之12-代理模式

    代理模式(Proxy Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/411 访问. 代理模式属于结构型 ...

  9. C#LeetCode刷题之#13-罗马数字转整数(Roman to Integer)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3842 访问. 罗马数字包含以下七种字符: I, V, X, L, ...

  10. Homekit_DoHome_智能通断器

    本款通断器适用于IOS和android系统用户,苹果用户可以非常方便的使用siri进行有效控制,android用户需要下载Dohome App进行操作,同时支持市面上主流的智能音箱进行控制. 对于an ...