对深层嵌套对象进行取值&赋值
需求如下:
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 ...
随机推荐
- C#进阶系列——WebApi 传参详解
本篇打算通过get.post.put.delete四种请求方式分别谈谈基础类型(包括int/string/datetime等).实体.数组等类型的参数如何传递. 回到顶部 一.get请求 对于取数据, ...
- C#正则表达式根据分组命名取值
string[] regexList = new string[] { @"^(?<TickerPart1>[0-9A-Z])[ 0_]?(?<TickerPart2> ...
- 海量数据处理的 Top K 相关问题
Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对 ...
- 单例模式详解以及需要注意的地方(Singleton)
单例模式,顾名思义,就是在Java程序中只有唯一一个实例,这样做的好处是可以在不需要多个实例的对象采用单例模式可以节省内存,否则会造成不必要的内存浪费.单例模式的定义为:保证一个类只有一个实例,自己可 ...
- 【转载】Sqlserver使用SUBSTRING函数截取字符串
在SQL语句查询过程中,Sqlserver支持使用LEFT().RIGHT().SUBSTRING()等几个函数对字符串进行截取操作,SubString函数相对于其他两个函数来说更灵活,使用场景更多, ...
- Eclipse workspace被锁定
重新打开Eclipse时,提示如下: Workspace Unavailable: Workspace in use or cannot be created, choose a different ...
- for循环的耗时问题
结论——用变量来缓存数组长度,效率会更高
- 网站seo搜索引擎优化
SEO综合查询方式:http://seo.chinaz.com/网站地址(一般为域名地址),比如:http://seo.chinaz.com/www.test.com 搜索关键字(keywords)优 ...
- Powershell-获取Hyper-V复制状态
Get-VM | Select-Object name,ReplicationHealth
- c# 克隆来创建对象副本