Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Javascript中的节点号将平面列表数组转换为树视图数组_Javascript_React Native_Javascript Objects - Fatal编程技术网

基于Javascript中的节点号将平面列表数组转换为树视图数组

基于Javascript中的节点号将平面列表数组转换为树视图数组,javascript,react-native,javascript-objects,Javascript,React Native,Javascript Objects,我想根据Javascript中的节点号将平面列表数组转换为树视图数组。节点编号表示子数组元素。e、 g.nodenumber 1.1表示元素“A”的子元素,nodenumber 1.1.1表示元素“B”的子元素,依此类推 输入 预期产量 没有等级限制 我曾尝试为每个元素设置唯一的键,并尝试进行下一步,但我被卡住了: var res = []; var flatList = []; input.forEach(loopContent); function loopContent(item,inde

我想根据Javascript中的节点号将平面列表数组转换为树视图数组。节点编号表示子数组元素。e、 g.nodenumber 1.1表示元素“A”的子元素,nodenumber 1.1.1表示元素“B”的子元素,依此类推

输入

预期产量

没有等级限制

我曾尝试为每个元素设置唯一的键,并尝试进行下一步,但我被卡住了:

var res = [];
var flatList = [];
input.forEach(loopContent);
function loopContent(item,index,arr) {
    let node = item.nodeNumber.split('.').join('_');
    item['flat_id'] = node;
    res[node] = item; flatList.push(node);
} 

请帮助我

这是学习可重用模块和交互递归的好机会。此答案中的此解决方案解决了您的特定问题,而无需对中编写的模块进行任何修改

在开始之前,我们必须首先提供一个针对您的问题的
父函数

const parent=(str=”“)=>
{const pos=str.lastIndexOf(“.”)
返回位置==-1
无效的
:str.substr(0,位置)
}
父项(“1.2.2”)/=>“1.2”
父项(“1.2”)/=>“1”
父项(“1”)/=>null
现在让我们建一棵树-

//Main.js
从“./tree”导入{tree}
常量输入=
[{name:“A”,nodeNumber:“1”},{name:“B”,nodeNumber:“1.1”},{name:“C”,nodeNumber:“1.1.1”},{name:“D”,nodeNumber:“1.2”},{name:“E”,nodeNumber:“1.2.1”}
常数结果=
树

(input//parent(node.nodeNumber)///向我们展示您尝试了什么以及在哪里遇到了问题。那么,这不是免费的代码编写吗service@charlietfl我曾尝试将每个元素的键设置为唯一,并尝试进行下一步,但我被困在了var res=[];var flatList=[];input.forEach(loopContent);函数loopContent(item,index,arr){let node=item.nodeNumber.split('.').join('.');item['flat_id']=node;res[node]=item;flatList.push(node);}编辑问题,将格式化代码包括在内,并对问题的原因进行更详细的解释
{
    "name": "A",
    "nodeNumber": "1",
    "children" :[
      {
        "name": "B",
        "nodeNumber": "1.1",
        "children" :[
          {
            "name": "C",
            "nodeNumber": "1.1.1"
          }
        ]
      },
      {
        "name": "D",
        "nodeNumber": "1.2",
        "children" :[
          {
            "name": "E",
            "nodeNumber": "1.2.1"
          },
          {
            "name": "F",
            "nodeNumber": "1.2.2"
          }
        ]
      }
    ]
  }
var res = [];
var flatList = [];
input.forEach(loopContent);
function loopContent(item,index,arr) {
    let node = item.nodeNumber.split('.').join('_');
    item['flat_id'] = node;
    res[node] = item; flatList.push(node);
} 
// Tree.js
import { index } from './Index'

const empty =
  {}

function tree (all, indexer, maker, root = null)
{ const cache =
    index(all, indexer)

  const many = (all = []) =>
    all.map(x => one(x))
                             // zero knowledge of forum object shape
  const one = (single) =>
    maker(single, next => many(cache.get(next)))

  return many(cache.get(root))
}

export { empty, tree } // <-- public interface