|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近遇到一个问题,总的来说就是通过字符串'a.b.c.d'来设置对应对象结构的值,举个例子
- // 现在我们有这样一个结构的对象,也就是说,我们要通过 'a.0.b.0.c' 这个字符串来设置 objs.a[0].b[0].c 的值
- const objs = {
- a: [
- {
- b: [
- {
- c: ''
- }
- ]
- }
- ],
- };
- const str = 'a.0.b.0.c';
- /**
- * @param objs 原始对象
- * @param str 路径字符串
- * @param value 要修改的值
- */
- function setValue(objs, str, value) {
- if (typeof str !== 'string') {
- throw new Error(`参数类型错误`)
- };
- str = str.split('.'); // 切割成数组 ['a', '0', 'b', '0', 'c']
- // 取到str数组的倒数第二个
- for(let i = 0; i < str.length - 1; i++) {
- if (objs[str[i]] !== undefined) {
- objs = objs[str[i]];
- } else {
- throw new Error('传入取值路径有误');
- }
- }
- // 那么此时 objs 拿到的就是 objs.a[0].b[0]的值,最后赋值,就修改成功了
- objs[str[str.length - 1]] = value;
- }
- setValue(objs, str, '李四');
- console.log(objs); // 那么到这里,就已经将 objs.a[0].b[0].c 的值修改为 '李四' 了,功能完成
复制代码
下面我们来说下通过路径字符串去取对象的值,很简单,代码只需做小小的改动
- // 现在我们有这样一个结构的对象,也就是说,我们要通过 'a.0.b.0.c' 这个字符串来设置 objs.a[0].b[0].c 的值
- const objs = {
- a: [
- {
- b: [
- {
- c: '张三'
- }
- ]
- }
- ],
- };
- const str = 'a.0.b.0.c';
- /**
- * @param objs 原始对象
- * @param str 路径字符串
- */
- function getValue(objs, str) {
- if (typeof str !== 'string') {
- throw new Error(`参数类型错误`)
- };
- str = str.split('.'); // 切割成数组 ['a', '0', 'b', '0', 'c']
- for(let i = 0; i < str.length; i++) {
- if (objs[str[i]] !== undefined) {
- objs = objs[str[i]];
- } else {
- throw new Error('传入取值路径有误');
- }
- }
- return objs;
- }
- console.log(getValue(objs, str));
复制代码 |
|