javascript - 根据输入和输出转换 JSON

标签 javascript json

以下是一个对象数组,其值为 v、其输入 i 和输出 o

var data = [
    {
      v: 1,
      i: [],
      o: [1, 2, 3]
    }, 
    {
      v: 2,
      i: [2],
      o: [4, 5, 6]
      ]
    },
    {
      v: 3,
      i: [1, 4],
      o: [7, 8]
    }, 
    {
      v: 4,
      i: [],
      o: [3]
    }
]

通过检查每个v的输入和输出来创建最终的JSON结构,即父子关系......

最终的 JSON 结构..

[
    {
        v: 1,
        children: [
            {
                v: 2
            },
            {
                v: 3
            }
        ]
    },
    {
        v: 4
    }
]

我尝试了以下代码,但它没有正确转换对象数组...

function checkForOutputs(outputs, groupedValueChainEntityLists) {
  for (var i = 0; i < outputs.length; i++) {
    for (var j = 0; j < groupedValueChainEntityLists[j].inputs.length; j++) {
      var val_Chain = groupedValueChainEntityLists[j].inputs.map((item) => {
        if (outputs[i].o === item.o) {
          return groupedValueChainEntityLists[j];
        }
      });
      return val_Chain;
    }
  }
}


function constructValueChainRelations(data) {
  var valueChainArray = new Array();
  var result = data.map((item) => {
    if (item.i.length === 0) {
      valueChainArray.push(item);
      return checkForOutputs(item.o, data);
    }
  });
  console.log(result);
}

最佳答案

我认为你让这件事变得太困难了。只需映射值即可。

var data = [{
  v: 1,
  i: [],
  o: [1, 2, 3]
}, {
  v: 2,
  i: [2],
  o: [4, 5, 6]
}, {
  v: 3,
  i: [1, 4],
  o: [7, 8]
}, {
  v: 4,
  i: [],
  o: [3]
}];

function transform(verticies, idProp, childProp) {
  return verticies.map(function(vertex) {
    return {
      v: vertex[idProp],
      children: vertex[childProp].filter(function(childVertex) {
        return childVertex !== vertex[idProp];
      }).map(function(childVertex) {
        return {
          v: childVertex
        };
      })
    }
  });
}

var transformed = transform(data, 'v', 'o');
document.body.innerHTML = '<pre>' + JSON.stringify(transformed, null, 4) + '</pre>';

结果

[{
    "v": 1,
    "children": [{
        "v": 2
    }, {
        "v": 3
    }]
}, {
    "v": 2,
    "children": [{
        "v": 4
    }, {
        "v": 5
    }, {
        "v": 6
    }]
}, {
    "v": 3,
    "children": [{
        "v": 7
    }, {
        "v": 8
    }]
}, {
    "v": 4,
    "children": [{
        "v": 3
    }]
}]

关于javascript - 根据输入和输出转换 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36573691/

相关文章:

javascript - 如何在加载时通​​过 jQuery 选择单选按钮?

javascript - jQuery 文件上传脚本错误

javascript - 在 Javascript 中使用内部和外部分隔符拆分字符串

javascript - 无法使用异步 waterfall 运行 parse-csv 函数

json - 可以使用 curl 上传外部 json 文件而不是 --data 吗?

javascript - jQuery Datatables 未序列化超过 1000 条记录

javascript - 使用 switch 结构的初学者脚本未运行

php - Ajax POST 方法在 PHP 中不起作用,但 GET 可以工作

javascript - 设置全局变量但未得到预期结果

json - 在react应用程序中使用fetch渲染json数据