我想返回一个仅包含通过数组传递的键的对象, 例如 我有一系列 key ,
const arr = ['a', 'b', 'c', 'd', 'e']
和一个对象,
const obj = {
a: {
name: 'a',
capital: 'A'
},
g: {
name: 'g',
capital: 'G'
},
b: {
name: 'b',
capital: 'B'
},
m: {
c: {
name: 'c',
capital: 'C'
}
},
z: {
name: 'z',
capital: 'Z'
},
n: {
e: {
name: 'e',
capital: 'E'
}
},
o: {
f: {
d: {
name: 'd',
capital: 'D'
}
}
}
}
现在我想返回一个对象,其中仅包含 arr
、'a'、'b'、'c'、'd' 和 'e' 中存在的键
code>,所以我的结果对象将是,
{
a: {
name: 'a',
capital: 'A'
},
b: {
name: 'b',
capital: 'B'
},
c: {
name: 'c',
capital: 'C'
},
e: {
name: 'e',
capital: 'E'
},
d: {
name: 'd',
capital: 'D'
}
}
方法:
我正在接近它,如下所示,但没有得到想要的结果,
function fetchValueByKey(object, key, result) {
if(typeof object !== 'object')
return result;
for(let objKey in object) {
if(key.indexOf(objKey) > -1) {
result[objKey] = object[objKey];
console.log(result);
} else {
result[objKey] = fetchValueByKey(object[objKey], key, result);
console.log(result)
}
}
}
console.log(fetchValueByKey(obj, arr, {}));
请建议我如何实现这一目标?
最佳答案
你的代码很好;您只需在循环后返回或输出结果即可。 PLUS,不需要 result[objKey] =
,因为您已经确定 objKey
不在您要查找的键列表中寻找,所以只需再次调用该函数即可向下钻取子对象。
const arr = ['a', 'b', 'c', 'd', 'e']
const obj = { a: { name: 'a', capital: 'A' }, g: { name: 'g', capital: 'G' }, b: { name: 'b', capital: 'B' }, m: { c: { name: 'c', capital: 'C' } }, z: { name: 'z', capital: 'Z' }, n: { e: { name: 'e', capital: 'E' } }, o: { f: { d: { name: 'd', capital: 'D' } } } };
function fetchValueByKey(object, key, result) {
if(typeof object !== 'object')
return result;
for(let objKey in object) {
if(key.indexOf(objKey) > -1) {
result[objKey] = object[objKey];
//console.log(result);
} else {
fetchValueByKey(object[objKey], key, result);
//console.log(result)
}
}
return result;
}
console.log(fetchValueByKey(obj, arr, {}));
关于javascript - 在 Javascript 中通过键数组过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72204726/