javascript - 过滤具有相同 id 的对象数组
问题描述
假设我有一个这样的json:
[
{
id: 3,
name: 'A',
depth:0
},
{
id: 2,
name: 'C'
depth:1
},
{
id: 3,
name: 'B',
depth:1
},
{
id: 1,
name: 'Z'
},
{
id: 2,
name: 'F',
depth:0
}
]
我想做的是使用这些规则创建另一个对象数组:
1:在数组中找到相同的id
2:检查深度(所以如果深度为0,它应该是父元素,如果深度为1,它应该是深度为0的元素的子元素)
像这样 :
[
{
id: 3,
name: 'A',
depth:0,
child:[
{
id: 3,
name: 'B',
depth:1
},
]
},
{
id: 1,
name: 'Z'
},
{
id: 2,
name: 'F',
depth:0,
child:[
{
id: 2,
name: 'C',
depth:1,
},
]
}
]
任何帮助将不胜感激?
解决方案
干得好..
var a = [
{
id: 3,
name: 'A',
depth:0
},
{
id: 2,
name: 'C',
depth:1
},
{
id: 3,
name: 'B',
depth:1
},
{
id: 1,
name: 'Z'
},
{
id: 2,
name: 'F',
depth:0
}]
var c = a.filter(a => a.depth == 0);
var zeroDepth = a.filter(a => a.depth === undefined);
zeroDepth.forEach(z => c.push(z));
a.forEach(a =>
{
if(a.depth == 1){
c.forEach(c =>
{
if(c.id == a.id){
c.child = [];
c.child.push(a);
}
})
}
})
console.log(c);
推荐阅读
- deployment - Solidity 迁移合同试运行与真实
- jenkins - 在 Jenkinsfile shell 中转义 JSON 字符串
- java - Thread#run() 中的 Thread#wait() 和 JFrame#keyPressed() 中的 Thread#notify() - 我的实现线程安全吗?
- youtube - Youtube 播放列表 api 返回部分数据
- php - 使用 Cakephp 3.6 定义 cron 作业
- hyperledger-fabric - 是否有一些好的文档或文章来获取有关如何动态识别 Hyper ledger Peers IP 的信息
- .net-core - VSTS/Azure DevOps:自动递增 NuGet 包版本
- php - esp32 和 php XXTEA 字符串加密
- node.js - mongoose 或 mongoDB 如何分离和分组我的数据?
- apache - Apache、ping 等工作时无法通过 cURL 连接到本地虚拟主机(错误 7)