对深层嵌套对象进行取值&赋值
需求如下:
let obj = { foo: { bar: { name: 'biz' } } }; // 输出 'biz'
this.getObj(obj, 'foo.bar.name');
obj = {};
this.getObj(obj, 'foo.bar.name'); // 输出 undefined
this.getObj(obj, 'foo.bar.name', 'biz'); // 输出 biz
写出一个符合要求的 getObj(),方法如下:
// getObj 方法
getObj(obj, path, defaultVal) {
if (path) {
const childArr = path.split('.');
if (childArr.length) {
try {
console.log('第一步', this.getItem(obj, childArr, 0));
} catch (e) {
if (defaultVal !== undefined) {
this.setItem(obj, childArr, defaultVal);
console.log('第三步', this.getItem(obj, childArr, 0));
} else {
console.log('第二步 ', undefined);
}
}
}
}
}
// 取值方法
方法一:
getItem(obj, arr) {
let v = '';
arr.reduce((cur, key, index) => {
if (index === arr.length - 1) {
v = cur[key];
} else {
return cur[key];
}
}, obj);
return v;
} 方法二:
getItem(obj, arr, index) {
if (arr.length - 1 !== index) {
const tempObj = obj[arr[index]];
return this.getItem(tempObj, arr, index + 1);
}
return obj[arr[index]];
}
// 赋值方法
setItem(obj, arr, dv) {
arr.reduce((cur, key, index) => {
if (!cur[key]) {
cur[key] = {};
}
if (index === arr.length - 1) {
cur[key] = dv;
}
return cur[key];
}, obj);
},
对深层嵌套对象进行取值&赋值的更多相关文章
- JavaScript —— 对象的取值与赋值
可能是因为用惯了 Java ,对一个对象取值/赋值喜欢用 setXXX() 和 getXXX() . 在 JavaScript 中使用 setValue() 时,遇到了个奇怪的问题,所以查了下 Jav ...
- js表单快速取值/赋值 快速生成下拉框
1.表单取值/赋值公共方法 //表单序列化:文本框的name字段和数据源一致<form id="myForm" onsubmit="return false;&qu ...
- Jquery 关于span标签的取值赋值用法
span是最简单的容器,可以当作一个形式标签,其取值赋值方法有别于一般的页面元素. //赋值 $("#spanid").html(value) //取值 $("#span ...
- Jquery操作下拉框(DropDownList)实现取值赋值
Jquery操作下拉框(DropDownList)想必大家都有所接触吧,下面与大家分享下对DropDownList进行取值赋值的实现代码 1. 获取选中项: 获取选中项的Value值: $('sele ...
- Jquery操作下拉框(DropDownList)的取值赋值实现代码(王欢)
Jquery操作下拉框(DropDownList)的取值赋值实现代码(王欢) 1. 获取选中项: 获取选中项的Value值: $('select#sel option:selected').val() ...
- winform 批量控件取值赋值
以前写winform 最多写几个文本框,最近需要入录一个人员信息,那好几十个字段,一下子干蒙了,这要是一个个取值赋值都写到明天了,于是就自己写了个方法,也不是什么高大上的,就是很简单很普通很low的方 ...
- JQuery关于span标签的取值赋值
span取值赋值方法有别于一般的页面元素.JQ://赋值$("#spanid").html("hello world") //取值$("#spanid ...
- Dynamics 365-表单元素取值/赋值
取值/赋值 参考: 山人丶 提示: 查找类型赋值时需指定目标实体,记录名称及id值 时间和日期类型赋值时需赋值Date类型 //获取new_name的值(单行文本) Xrm.Page.getAttri ...
- js数组对象--数据格式的转换(字符串,对象的取值与赋值)
材料:提供一份数据:arr=[ {value:335, name:'直接访问'}, {value:310, name:'邮件营销'}, {value:234, name:'联盟广告'}, {value ...
随机推荐
- Python中的单例模式的几种实现方式和优化以及pyc文件解释(转)
原文:https://www.cnblogs.com/huchong/p/8244279.html 另一篇关于.pyc文件是什么? 原文: http://blog.sina.com.cn//s/bl ...
- Spring Cloud Alibaba学习笔记(11) - RocketMQ事务消息
在Spring中,我们要实现事务,一般通过@Transactional注解实现.这在引入RocketMQ之前没有问题,但是在引入了RocketMQ之后,如果消息发送之后的业务逻辑处理发生了异常的话,这 ...
- C# 微信消息模板 发送
项目要用到微信提醒 ,加上调转到小程序页面,或者 指定url 用到 RestSharp.Senparc.Weixin 类库 一开始直接照着微信示例直接post进去 发现一直提示 47001 ,估计 ...
- mock打桩测试
pom依赖: <!-- https://mvnrepository.com/artifact/org.jmockit/jmockit --> <dependency> < ...
- 如何设置MySql Server远程访问(Debian Linux)
1. 登录Mysql Server: $mysql -u root -p 2. 检查网络,Server是否允许远程连接: mysql> show variables like '%skip_ne ...
- vue使用技巧:Promise + async + await 解决组件间串行编程问题
业务场景描述 大家都通过互联网投递过简历,比如在智联.58.猎聘等平台.投递心仪的职位前一般都需要前提创建一份简历,简历编辑界面常规的布局最上面是用户的个人基本信息,如姓名.性别.年龄.名族等,接着是 ...
- oracle trunc函数用法
转自:https://www.e-learn.cn/content/qita/699481 /**************日期********************/ select trunc(sy ...
- springboot 日志配置
maven依赖中添加了 spring-boot-starter-logging : <dependency> <groupId>org.springframework.boot ...
- Java软件编码习惯
1.再删除某个类时候,一定别忘记把对应的import也删除掉: 可以手动删除,也可以 Ctrl+Shift+O快捷键自动删除和导入.
- 关于get 和post 方法的比较
地址:https://my.oschina.net/leejun2005/blog/136820 点击这里