对深层嵌套对象进行取值&赋值
需求如下:
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 ...
随机推荐
- 利用strace & Perf分析MySQL
strace介绍及用途 strace是一个用于诊断,分析linux用户态进程的工具 类似的工具pstrace,lsof,gdb,pstrack strace观察mysqld对my.cnf 配置文件的加 ...
- js实现CheckBox全选或者不全选
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">< ...
- python——操作系统的发展史
一.手工操作 —— 穿孔卡片 1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式.此时还没有操作系统的概念. 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入 ...
- VBA For Each循环
For Each循环用于为数组或集合中的每个元素执行语句或一组语句.For Each循环与For循环类似; 然而,For Each循环是为数组或组中的每个元素执行的. 因此,这种类型的循环中将不存在步 ...
- Cookie实现记住密码的功能
一.什么是Cookie cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段.Cookie的目的就是为用户带来方便,为网站带来增值.虽然有着许多误传,事实上Cookie并不会造成严重 ...
- jmeter第一次使用
创建线程组 依次创建后,在http请求页面填入接口地址,参数,头信息,点击运行,然后查看结果树
- String Buffer和String Builder的区别(转)
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- 第一周助教小结——发布作业&线上答疑
第一周助教小结 助教博客:https://www.cnblogs.com/jason5689/ 本周点评数目:0份 由于发布的作业还未截至,第一次的作业点评还没开始进行,就描述一下评论博客前的感受吧 ...
- phpstorm快捷键使用
- Return local beginning of day time object in Go
Both the title and the text of the question asked for "a local [Chicago] beginning of today tim ...