- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个对象数组,我想知道如何将其格式化为一个选择框,使用连字符来表示更深的每个级别。这是我的对象 -
let elements = {
0: {
id: 1,
name: 'Parent folder',
parent_id: null
},
1: {
id: 2,
name: 'Another parent folder',
parent_id: null
},
2: {
id: 3,
name: 'Child folder 1',
parent_id: 1
},
3: {
id: 4,
name: 'Child folder 2',
parent_id: 1
},
4: {
id: 5,
name: 'Child of a child',
parent_id: 4,
},
}
我希望 elements
像下面这样重新格式化 -
let elements = {
0: {
id: 1,
name: 'Parent folder',
parent_id: null,
depth: 0
},
1: {
id: 3,
name: 'Child folder 1',
parent_id: 1,
depth: 1
},
2: {
id: 4,
name: 'Child folder 2',
parent_id: 1,
depth: 1
},
3: {
id: 5,
name: 'Child of a child',
parent_id: 4,
depth: 2
},
4: {
id: 2,
name: 'Another parent folder',
parent_id: null,
depth: 0
},
}
这样我就可以遍历对象并根据深度变量在以下结构中生成一个选择 -
Parent folder
- Child folder 1
- Child folder 2
-- Child of a child
Another parent folder
目前我正在通过一个过程循环我的对象并获得一个多级对象,所以也许我只需要弄清楚如何将其转换回单个深度对象数组?
if(elements.length > 0) {
for (let i = 0; i < elements.length; i++) {
let obj = Object.assign({}, elements[i]);
let depth = 0;
obj.items = [];
map[obj.id] = obj;
let parent = obj.parent_id || '-';
if (!map[parent]) {
map[parent] = { items: [] }
}
map[parent].items.push(obj);
}
console.log(map);
return map['-'].items;
}
我觉得对此有一个相对简单的答案,但我正在努力!期待您的想法,谢谢!
最佳答案
您可以先创建一棵树来反射(reflect)关系,然后构建一个平面数组,该数组后来成为一个对象。
function getTree(array) {
var o = {};
array.forEach(function ({ id, name, parent_id }) {
Object.assign(o[id] = o[id] || {}, { id, name, parent_id });
o[parent_id] = o[parent_id] || {};
o[parent_id].children = o[parent_id].children || [];
o[parent_id].children.push(o[id]);
});
return o.null.children;
}
function getFlat(array = [], level = 0) {
return array.reduce((r, { id, name, parent_id, children }) =>
r.concat({ id, name, parent_id, level }, getFlat(children, level + 1)), []);
}
var elements = { 0: { id: 1, name: 'Parent folder', parent_id: null }, 1: { id: 2, name: 'Another parent folder', parent_id: null }, 2: { id: 3, name: 'Child folder 1', parent_id: 1 }, 3: { id: 4, name: 'Child folder 2', parent_id: 1 }, 4: { id: 5, name: 'Child of a child', parent_id: 4 } },
tree = getTree(Object.assign([], elements)),
flat = getFlat(tree);
console.log(flat.map(({ name, level }) => '-'.repeat(level) + name).join('\n'));
console.log(Object.assign({}, flat));
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 如何在 JavaScript 中创建 'multi depth' 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50907102/
cv2.phase() 函数有问题。我编写了以下代码: img = cv2.imread("1.jpg", 0) cv2.imshow("image", img) img_dx = cv2.Sobel
我正在尝试在 OpenCV 中处理一些图像。具体来说,使用以下函数交换颜色 Pane 。 def green_ble_swap(image) im_rgb = cv2.cvtColor(ima
在Unreal 4.24编辑器中,Actor's Detail面板上的“Rendering”部分中,有一个“Render CustomDepth Pass”复选框,以及一个“CustomDepth S
当我尝试在 Visual Studio 2010 中从 here 运行此代码时.我收到以下错误 OpenCV Error: Assertion failed ((img.depth() == CV_8
我有一个计算旋转和平移矩阵的代码如下: matrix Matrix rt = new Matrix(3, 4); if (positiveCount[0] > positiveCount[1])
我是初学者。我尝试使用Tensorflow进行图像分类,并收到以下错误。我在网上发现了类似的问题,但我听不懂。错误是什么意思?我应该怎么做?请给我一些建议。我使用100个文件(png/15pix,15
我在 this website 上找到了以下代码: import os import os.path import cv2 import glob import imutils CAPTCHA_IMA
这是虚拟更衣室的代码 因此,基本上是为了运行此代码ubuntu 12.04,python 2.7.3,gtk2和opencv 2。它删除背景屏幕,在几乎任何光线条件下检测T恤,替换T恤颜色。编写用于替
我从上面得到这个错误,不知道如何避免它。我的目的是获取屏幕截图,然后对其进行模板匹配,以查看此时屏幕上是否显示图标。到目前为止,它只是图标的位置。我的代码: #include "opencv2/hig
我正在尝试获取使用开放姿势检测到的点的像素坐标值。有人可以告诉我这是识别像素坐标的正确方法吗?还是有其他特定方法可以获取下图中表示为 2 和 5 的像素坐标? 代码: for pair in POSE
我正在尝试使用代码阅读多项选择测试反馈中的答案,但出现以下错误消息: error: (-215:Assertion failed) npoints >= 0 && (depth == CV_32F |
我有一个 Python 算法,它基本上可以帮助找到函数的“深度”: f(a) has a depth of 1 f(g(h(a,b,c),d)),e) has a depth of 3 伪算法是这样的
我正在使用 d3 编写动画,但我似乎无法找到一种方法来轻松确保图形始终出现在其他图形“后面”。 具体来说,我正在处理直线和圆(想象一个有向图),有些线位于圆的顶部,而其他线位于圆的下方,看起来有点糟糕
我正在研究爬虫,需要准确理解“链接深度”的含义。以nutch为例:http://wiki.apache.org/nutch/NutchTutorial depth indicates the link
当做 depth first search在 Directed Graph pre 是什么意思和 post数字? 例如: 如果您从节点 A 开始并按字母顺序排列 Depth First Search你
我在尝试为 Vulkan 构建投影矩阵时遇到了矛盾,并且还没有找到关于投影矩阵如何将 Z 从输入向量映射到输出的解释。映射 x 和 y 很简单。我的理解是 OpenGL 投影矩阵应该将近视锥平面映射到
boolean backtrackDFS(v) { If (SolutionFound(v)) return true; Mark vertex v as reached. f
根据 AIMA(人工智能:现代方法)中的 Norvig 的说法,深度优先算法并不完整(不会总是产生解决方案),因为在某些情况下,下降的子树将是无限的。 另一方面,如果分支因子不是无限的,则广度优先方法
我正在使用谷歌标签管理器对当前站点进行谷歌分析。 现在,我们想知道人们在我们的网站上滚动了多远。 所以我使用了一个名为jquery.scrollDepth.js的插件 $(document).r
我正在用 smallcheck 做我的第一项真正的工作, 我对如何使用 Depth 有点困惑范围。在开始之前,让我先说明我在使用什么 smallcheck为了。 在工作中,我们正在我们自己的内部数据库
我是一名优秀的程序员,十分优秀!