通过要按顺序获取的键列表获取嵌套键

Get nested keys via a list of keys to get in sequence

本文关键字:获取 列表 嵌套 顺序      更新时间:2023-09-26

下面是我的一些代码:

// "iterable" is a Map
iterable.forEach((definition, schemaKey) => {
  let keyToGet = schemaKey.split('.');
});

keyToGet包含一个嵌套键的列表,我想按排序顺序获得这些键。也就是说,如果我有一个用户对象,

{
  profile: {
    name: { full: "Cat Man" }
  }
}

我想使用['profile', 'name', full]访问profile.name.full。是否可以使用此值列表获取值?

您可以执行一个递归函数,如果找到键,该函数将沿对象向下移动,如果到达数组的末尾,则最终返回值。如果未找到密钥,则返回-1:

function getFromArr(obj, arr){
	function travelDown(current,index){
    	if(current.hasOwnProperty(arr[index])){
        	if(index+1 == arr.length){
            	return current[arr[index]]
            }else{
            	return travelDown(current[arr[index]], index+1)
            }
        }else{
        	return -1;
        }
    }
    return travelDown(obj, 0)
}
var obj ={
  profile: {
    name: { full: "Cat Man" }
  }
}
console.log(getFromArr(obj,["profile", "name", "full"])) // Cat Man
console.log(getFromArr(obj,["profile", "name"])) // {full: "Cat Man"}
console.log(getFromArr(obj,["profile", "name", "nonexistant"])) // -1