从一个字符串获取对应的值

从字符串获取对应值

有对象resume,内有属性数组skill,数组skill中每一项都有属性name;

现有一字符串'skill[0].name';

要取到对应的name值。

1
2
3
4
5
6
7
8
9
10
11
12
13
let key = 'skill[0].name'
let regex = /\[(\d+)\]/g //取出字符串中的 '[0]'和'0'
key = key.replace(regex, (match, number) => `.${number}`) //将字符串中的 [0] 替换成 .0
keys = key.split('.') //keys是数组 [skill, 0, name]

let result = resume
for(let i=0; i<keys.length; i++){
result = result[keys[i]]
// keys = [skill, 0, name]
// i=0 result === result.skill === resume.skill
// i=1 result === result.0 === resume.skill.0
// i=2 result === result.name === resume.skill.0.name
}

如果要改name值:

1
2
3
4
5
6
7
8
9
10
11
let result = result
for(let i=0; i<keys.length; i++){
if(i === keys.length-1){
result[keys[i]] = value
//此时result = resume.skill[0].name,可以给它赋值,
//即 resume.skill[0].name = value
//如果不在这一步赋值,最后再给result赋值,等同于给 resume.skill[0].name 对应的值赋值。
}else{
result = result[keys[i]]
}
}