JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象
数组的增删改
1、新增一项
可以使用concat方法,它不会对原有数组进行改动,而是创建一个新数组
let a = [0, 1, 2]
let b = a.concat([3])
console.log(a, b)
2、删除一项
对于删除某一项的操作,splice也不能满足要求,因为该方法会改变原有数组,相应地我们应该使用slice,并结合es next 新特性。
let array = [1,2,3]
const removeIndex = (array, index) => {
return [
...array.slice(0, index),
...array.slice(index + 1),
]
}
let newArray = removeIndex(array, 1);
3、更新一项
let array = [1, 2, 3];
const updateIndex = (array, index, cb) => {
return [
...array.slice(0, index),
cb && cb(array[index]),
...array.slice(index + 1),
]
}
updateIndex(array, 1, function (data) {
return data + 1;
});
4、新增也可以使用这种思路,比concat要灵活
let array = [1, 2, 4];
const insertIndex = (array, index, value) => {
return [
...array.slice(0, index),
value,
...array.slice(array.length - 1),
]
}
insertIndex(array, 2, 3);
对象的增删改
1、更新一项
使用ES next新特性的 Object.assign 方法。
第一个参数必须是空对象,因为第一个参数会被改变(接受合并所有参数的值)
我们要更新的值必须放在最后面,因为参数越往后,权限越高。才能覆盖前者重复的内容
let sourceItem = {
id: 0,
book: 'Learn Redux',
avaliable: false
}
Object.assign({}, sourceItem, {
avaliable: true
})
2、对象操作:新增一项
其实和上面一样,写入新的键值对就算新增嘛
let sourceItem = {
id: 0,
book: 'Learn Redux',
avaliable: false
}
Object.assign({}, sourceItem, {
fuck: 123
})
3、对象操作:删除一项
let sourceItem = {
id: 0,
book: 'Learn Redux',
avaliable: false,
fuck: 123
}
let newItem = Object.key(sourceItem).reduce((obj, key) => {
if (key !== 'fuck') {
return { ...obj, [key], sourceItem[key] }
}
return obj
}, {})
JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象的更多相关文章
- Java中如何创建一个新的对象的/Creating Objects/
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't ...
- JS——数组中push对象,覆盖问题,每次都创建一个新的对象
今天写运动框架时,发现将对象push进数组,后面的值会覆盖前面的值,最后输出的都是最后一次的值.其实这一切都是引用数据类型惹的祸. 如果你也有类似问题,可以继续看下去哦. 下面 ...
- 什么是不可变对象(immutable object)?Java 中怎么 创建一个不可变对象?
不可变对象指对象一旦被创建,状态就不能再改变.任何修改都会创建一个新的对象,如 String.Integer 及其它包装类. 详情参见答案,一步一步指导你在 Java中创建一个不可变的类.
- javascript学习笔记 - 引用类型 Array
二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]; arr.length = 4;//增加 [1,2,3,undefined] arr.length = 2 ...
- 记一次oracle创建一个新数据库,并导入正式环境数据库备份的dmp包过程
背景:正式环境oracle数据库定时用exp备份一个dmp包,现在打算在一台机器上创建一个新数据库,并导入这个dmp包. 1.创建数据库 开始 -> 所有程序 -> Oracle -> ...
- filter() 方法创建一个新数组
filter快速过滤创建一个新数组 var new_array = arr.filter(callback(element[, index[, array]])[, thisArg]) 参数节 cal ...
- jquery创建一个新的节点对象(自定义结构/内容)的好方法
jq创建一个新的节点对象,这对一些自定义功能很有帮助,而且可以随意控制对象的结构与内容,何乐而不为呢,看到这里,相信有些朋友已经按耐不住了,好记下来为大家介绍实现方法,感兴趣的朋友可以了解下哦 < ...
- linux内核分析作业6:分析Linux内核创建一个新进程的过程
task_struct结构: struct task_struct { volatile long state;进程状态 void *stack; 堆栈 pid_t pid; 进程标识符 u ...
- Step by Step 创建一个新的Dynamics CRM Organization
原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...
随机推荐
- MySQL 简单存储过程实现Redis的INCR功能
USE test; DROP PROCEDURE IF EXISTS pro_testincrement; DELIMITER && CREATE PROCEDURE pro_test ...
- Java反射机制的使用(全)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6566957.html 一:反射是什么 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有 ...
- 【Linux】将一个命令的输出发送给另外一个命令
一个命令的输出可以作为下一个命令的输入,下一个命令的输出又会传递给下一个命令 我们通常使用管道和子shell的方法来组合多个命令的输出 格式 $ cmd1 |cmd2 | cmd3 这里的3个组合命令 ...
- Hibernate第一次学习总结
Hibernate概述 是一款方便应用操作数据库的中间件,使应用直接通过操作Java对象来操作数据库. 实现了ORM模型,包括:数据库表与JAVA对象的映射,表关联与Java对象关系的映射. 实现了O ...
- Centos6.5卸载图形化
问题描述: Centos6.5想运行在非图形化状态,减小系统资源的开销!提升服务器性能....... 问题解决: 01.切换运行模式,变相实现非图形化运行 多用户模式 init 图形化模式 init ...
- Kubernetes滚动更新介绍及使用-minReadySeconds
滚动升级Deployment 现在我们将刚刚保存的yaml文件中的nginx镜像修改为 nginx:1.13.3,然后在spec下面添加滚动升级策略: 1 2 3 4 5 6 7 minReady ...
- (原)tensorflow保存模型及载入保存的模型
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7198773.html 参考网址: http://stackoverflow.com/questions ...
- 表的复制——sql语句
SQL Server 复制表结构及数据到新表 select * into 目标表名 from 源表名(要求目标表不存在,因为在插入时会自动创建) 只复制表结构到新表 CREATE TABLE 新表 S ...
- maven groupID 和 ArtifactID的区别与作用
GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构. ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称.一般Gro ...
- 零行代码为 App 添加异常加载占位图
前文提要 近期准备重构项目,需要重写一些通用模块,正巧需要设置App异常加载占位图的问题,心血来潮设想是否可以零行代码解决此问题,特在此分享实现思路. 思路分享 对于App占位图,通常需要考虑的控件有 ...