{"topic1":{"609":["A","B"],"610":["C","D","E"]}}
在js中如何把609,610,A,B,C,D,E分别提取出来?
{"topic1":{"609":["A","B"],"610":["C","D","E"]}}
在js中如何把609,610,A,B,C,D,E分别提取出来?
由于题主给的对象是嵌套的, 我们需要遍历获取的是嵌套对象中最里面的非对象实例元素, 而对象嵌套最终会终止在非对象元素(如boolean
, number
, string
), 因此考虑使用递归判断是否Object
实例来遍历.
// 定义要遍历的对象
let obj = {
"topic1": {
"609": ["A","B"],
"610": ["C","D","E"]
}
};
// 遍历函数
// 非对象实例元素优先判断, 以获得正确的先序遍历结果
function traverse(obj) {
for (let key in obj) {
if (!(obj[key] instanceof Object)) {
// 当对象元素不是对象实例时, 输出到控制台
console.log(obj[key]);
} else {
// 否则说明该元素是个对象, 也即是嵌套对象, 遍历其中的元素
traverse(obj[key]);
}
}
}
实验结果:
配合ES6做法就太多了;一句就够了
var v=Object.keys(data.topic1);v.forEach((a,b)=>{v.push(data.topic1[a])});
let obj = {"topic1":{"609":["A","B"],"610":["C","D","E"]}};
function test(arg) {
if (arg instanceof Array)
return arg.reduce(
(res, item) => res.concat(test(item)),
[]);
else if (arg instanceof Object)
return Object.keys(arg).reduce(
(res, key) => res.concat([key], test(arg[key])),
[]);
else
return [arg];
}
test(obj.topic1);
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
1 回答6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决