javascript - 将 javascript 对象转换为 HTML

标签 javascript algorithm

所以我需要一个转换类型为js对象的函数:

{node: 'X', children: [{node: 'Y'}]}

与 html 类似的字符串的任意深度。例如上面的应该被转换成类似的东西:

'<div class="X"><div class="Y"></div></div>'

这在某种程度上应该是直观的,即节点相互插入的顺序与 div 相同。 所以这就是我到目前为止所拥有的:

function convertObj(obj){
  const html_start = '<div class="';
  const html_end = '</div>';
  let current_parent = obj;
  let child_nodes = '';
  console.log(current_parent, current_parent.children)  
  if( typeof( current_parent.children)!= 'undefined'){
    let childrn = current_parent.children.map(child_node => convertObj(child_node) )
    child_nodes = child_nodes + childrn
  }
  return html_start+current_parent.node+'">'+child_nodes+html_end;
}

问题是子节点之间的 , 如果它们的数量是多个的话。 这是我的笑话测试,它失败了

describe('convertObj', () => {
  it('should turn node value to a div with class of the same name', () => {
    expect(convertObj({node: 'A'})).toBe('<div class="A"></div>');
  });
  it('should incert nodes in children to parent node', () => {
    expect(convertObj({node: 'A', children:[{node : 'B'}]})).toBe('<div class="A"><div class="B"></div></div>');
    expect(convertObj({node: 'A', children:[{node : 'B'}, {node: 'C', children: [{node: 'D'}]}]})).toBe('<div class="A"><div class="B"></div> <div class="C"><div class="D"></div></div></div>');    
  });
}); 

感谢帮助!您可以运行测试 here

最佳答案

使用更多 ES6 语法糖,例如 object destructuring和一个 template literal ,你可以做一个非常简单的递归实现:

const convertObj = ({ node, children = [] }) =>
  `<div class="${node}">${children.map(convertObj).join(' ')}</div>`

const tree = {node: 'A', children:[{node : 'B'}, {node: 'C', children: [{node: 'D'}]}]}

console.log(convertObj(tree))

关于javascript - 将 javascript 对象转换为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50728240/

相关文章:

javascript - 每秒或更少制作一个 cookies 有什么不好吗?

javascript - require.js + backbone.js : How to structure modules that have an initialize function?

javascript - 为什么 javascript 对我从服务器获取的数据进行重新排序

algorithm - 搜索排序矩阵的复杂性

algorithm - 验证从应用程序到 Web 服务的答案,反之亦然

页面 onload 上的 Javascript ajax 调用

javascript - 无法调用类型缺少调用签名的表达式 TypeScript 错误

algorithm - 如何生成蔡斯序列

c++ - 这2张魔法卡能发挥的最大技能是多少?

algorithm - 在分布式哈希表中的节点连接期间优化键空间分区