无法通过在 JavaScript 中识别对象的父 ID 将对象推入父数组

2024-02-24

我有一个 JSON 数组,其属性为 id 和parentActivityId。

$scope.data = [
    {
        id: 1,
        activityName: "Drilling",
        parentActivityId: 0,
        items: [
            {
                id: 2,
                activityName: "Blasting",
                parentActivityId: 1,
                items: [
                    {
                        id: 3,
                        activityName: "Ann",
                        parentActivityId: 2,
                        items: [],

                    },
                    {
                        id: 4,
                        activityName: "Ann",
                        parentActivityId: 2,
                        items: [],

                    }
                ]
            },
            {
                id: 5,
                activityName: "Transport",
                parentActivityId: 1,
                items: [
                    {
                        id: 6,
                        activityName: "Daniel",
                        parentActivityId: 5,
                        items: [],
                    }
                ]
            }
        ]
    }
];

我想基于以下内容推送一个新项目parentActiityId.新项目将有一个新的id。 示例:如果我的对象是这样的:

{
    id: 7,
    activityName: "Drilling",
    parentActivityId: 1,
    items: []
}

那么我的对象将看起来像这样..

 $scope.data = [
        {
            id: 1,
            activityName: "Drilling",
            parentActivityId: 0,
            items: [
                {
                    id: 2,
                    activityName: "Blasting",
                    parentActivityId: 1,
                    items: [
                        {
                            id: 3,
                            activityName: "Ann",
                            parentActivityId: 2,
                            items: [],

                        },
                        {
                            id: 4,
                            activityName: "Ann",
                            parentActivityId: 2,
                            items: [],

                        },
                    {
                         id: 7,
                         activityName: "Drilling",
                         parentActivityId: 2,
                         items: [],
                     }
                    ]
                },
                {
                    id: 5,
                    activityName: "Transport",
                    parentActivityId: 1,
                    items: [
                        {
                            id: 6,
                            activityName: "Daniel",
                            parentActivityId: 5,
                            items: [],
                        }
                    ]
                }
            ]
        }
    ];

我尝试通过给出这个 for 循环..

var arrObj = {
    id: 7,
    activityName: "Drilling",
    parentActivityId: 1,
    items: []
};

function populateObj(arrObj) {
   for (var i = 0; i < $scope.data.length; i++) {
        if ($scope.data[i].id == arrObj.parentActivityId) {
            $scope.data.push(arrObj);
        }
    }
};

populateObj(arrObj);

它将仅推送到父级。我想在 for 循环中识别子级,并通过识别 thr ParentActivityId 推送到特定的数组对象。任何帮助将不胜感激。


通过递归提案和Array.prototype.reduce() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce:

var data=[{id:1,activityName:"Drilling",parentActivityId:0,items:[{id:2,activityName:"Blasting",parentActivityId:1,items:[{id:3,activityName:"Ann",parentActivityId:2,items:[]},{id:4,activityName:"Ann",parentActivityId:2,items:[]}]},{id:5,activityName:"Transport",parentActivityId:1,items:[{id:6,activityName:"Daniel",parentActivityId:5,items:[]}]}]}],
    child = { id: 7, activityName: "Drilling", parentActivityId: 1, items: [] };

function getParent(r, a) {
    return a.id === child.parentActivityId ? a : a.items.reduce(getParent, r);
}

var node = data.reduce(getParent, {});
'items' in node && node.items.push(child);

document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法通过在 JavaScript 中识别对象的父 ID 将对象推入父数组 的相关文章

随机推荐

  • Net Core Web Api – 如何为 SwaggerDoc 映射Optional

    我在用着Optional
  • Rails 6.1、Ruby 3.0.0:测试错误,因为它们无法加载 rexml

    我使用 Ruby 3 0 0 从头开始 创建了一个新的 Rails 6 1 应用程序 我已经跑了db create并生成带有一些字符串列的单个模型 然后是rails db migrate I ran rails test但出现了 requi
  • 哪些解析器可用于解析 C# 代码? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 哪些解析器可用于解析 C 代码 我正在寻找一个可在 C 中使用的 C 解析器 它使我能够访问有关所分析代
  • 如何为 Filebeat 配置 JBoss JsonFormatter (WildFly 14)

    我有 Filebeat 从标准输出中提取日志 我想确保我的日志以 JSON 格式输出 以便可以正确解析它们 到目前为止 这是我发现的 org jboss logmanager formatters 没有 JSON 格式化程序 有一个 扩展
  • 将列表中的元素替换为另一个列表中的元素

    如何替换 a 中的元素list和另外一个 例如我想要所有two成为one 您可以使用 Collections replaceAll list two one From 文档 http docs oracle com javase 7 doc
  • 更新 mobx 中的状态时组件不会重新渲染

    我试图理解为什么当我更改 mobx 可观察名称数组中的状态时我的应用程序没有重新渲染 我正在使用输入标签更改值 希望得到一些帮助 观察者部分 import observable action autorun computed from mo
  • 无法在初始化程序中访问实例成员“widget”

    在我的项目中 我使用以下代码将数据从一个小部件传递到另一个小部件 Navigator push context MaterialPageRoute builder context gt TranslatorSignUpStep2 trans
  • 如何使用Python打开ppt文件

    我想在linux上使用Python打开一个ppt文件 就像python打开一个 txt文件 我知道win32com 但我正在linux上工作 那么 我需要做什么 python pptx https python pptx readthedo
  • 我的 Zend 框架“引用”混乱

    我有一个可能非常简单的问题 在 Zend Framework 手册或其他地方找不到令人满意的 主观看到的 答案 有很多方法可以将我的 php 变量移交给我的 sql 查询 以至于我失去了概述 并且可能我对一般引用缺乏一些理解 准备好的报表
  • 带回溯的数独求解算法

    我正在寻求实现一种非常简单的算法 该算法使用强力回溯来解决数独网格 我面临的问题是 在我的实现中 我包含了两个实例变量Sudoku类称为row and col 对应于表示数独网格的二维数组中空单元格的行和列 When my solve 方法
  • CodeIgniter 和 HMVC 问题

    首先 对这篇文章造成的任何不便表示歉意 因为这是我第一次在这里发布问题 我需要更多时间来适应这个问题 Q1 我想创建 2 个 主控制器 FrontEnd and BackEnd像这样 MY 控制器延伸CI 控制器 FrontEnd延伸MY
  • 对象字面量中属性名称周围的方括号意味着什么?

    我用JS写了一段时间了 还没有使用过这种形式 dist files bpr lib Monster min js the 它有效 我只是以前没有使用过或见过它 最近才使用 ES6 它们被称为 计算属性名称 From MDN https de
  • java中不使用乘法、除法和取模运算符来除两个整数

    我写了一个代码 该代码在将两个数字相除后找出商 但不使用乘法 除法或取模运算符 My code public int divide int dividend int divisor int diff 0 count 0 int fun di
  • 如何为 Android 启用 AllOpen 插件

    我正在尝试添加allopen https kotlinlang org docs reference compiler plugins html all open compiler plugin安卓插件 我把这个添加到我的build gra
  • 用于查找计划任务向导任务信息的脚本

    我知道有一个命令可以查找计算机的计划任务 但我想获取有关计划任务本身的更多信息 我想知道计划任务的执行时间和时间以及计划任务的名称和区域 有任何想法吗 Set TS CreateObject Schedule Service TS Conn
  • python,flask,网络应用程序安全[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在 Flask 上部署时 我想从 Web 应用程序编辑 sqlite 数据库 并且遇到了 chmod 权限问题 因此我只是让 root 以
  • 在 LESS 中生成供应商前缀

    我已经将这种方法拼凑在一起 使用 LESS 生成供应商前缀的属性和动画 首先是一些工厂函数 vendorprefix property value webkit property value moz property value ms pr
  • 使用 shell 脚本制作文件的多个副本

    我正在尝试编写一个小型 shell 脚本来制作文件的多个副本 我可以将文件名作为输入 但不能将副本数作为输入 这是我写的 但我无法通过NUMBER变量到for循环 echo n Enter filename read FILENAME ec
  • 编辑文本框中提示的自定义位置。

    我想知道是否有任何方法可以在 编辑文本 视图的底部获得提示 然后用户开始在框的顶部输入文本 作为一个额外的问题 有什么办法可以让提示在用户开始输入文本后不会消失 您可以使用 gravity 属性设置文本的位置 如http developer
  • 无法通过在 JavaScript 中识别对象的父 ID 将对象推入父数组

    我有一个 JSON 数组 其属性为 id 和parentActivityId scope data id 1 activityName Drilling parentActivityId 0 items id 2 activityName