javascript中提取元素

{"topic1":{"609":["A","B"],"610":["C","D","E"]}}


在js中如何把609,610,A,B,C,D,E分别提取出来?
阅读 3.1k
5 个回答
var obj = {"topic1":{"609":["A","B"],"610":["C","D","E"]}};
for(var p in obj.topic1) {
    console.log(p);  //获取到609、610
    var t = obj.topic1[p];
    for(var i = 0; i < t.length; i++){
        console.log(t[i]);  //获取A、B、C、D、E
    }
}

for...in... 遍历对象

由于题主给的对象是嵌套的, 我们需要遍历获取的是嵌套对象中最里面的非对象实例元素, 而对象嵌套最终会终止在非对象元素(如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]);
    }
  }
}

实验结果:

clipboard.png

配合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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题