javascript - 通过 id 查找元素并追加到对象中

标签 javascript arrays

我一直在想办法做到这一点。这是我的对象:

    {
   "id":1,
   "name":"Blooper Corp.",
   "emoji":"🐕",
   "parent_id":null,
   "children":[
      {
         "id":2,
         "name":"Food",
         "emoji":"🥩",
         "parent_id":1,
         "children":[

         ]
      },
      {
         "id":3,
         "name":"Canine Therapy",
         "emoji":"😌",
         "parent_id":1,
         "children":[
            {
               "id":4,
               "name":"Massages",
               "emoji":"💆",
               "parent_id":3,
               "children":[

               ]
            },
            {
               "id":5,
               "name":"Games",
               "emoji":"🎾",
               "parent_id":3,
               "children":[

               ]
            }
         ]
      }
   ]
}

我正在尝试获取最后一个 id数组,这样我就可以在新的子数组中使用它,并将它作为子数组添加到该特定层,例如:

{
  "id":6, // New id
  "name":"Music",
  "emoji":"",
  "parent_id":4, //this will be the parent id it belongs to
  "children":[

  ]
}

这是我的 javascript 按钮函数:

function askUserForTeamDetails( team ) {
    const emoji = prompt( 'Enter new team’s emoji:' );
    if ( null === emoji ) {
        return;
    }
    const name = prompt( 'Enter new team’s name:' );
    if ( null === name ) {
        return;
    }
    let tree = getTree();
    tree.id = {}; //new child array to push depending on parent id

    return { name, emoji };
}

getTree() :

const tree = {"id":1,"name":"Rusty Corp.","emoji":"🐕","parent_id":null,"children":[{"id":2,"name":"Food","emoji":"🥩","parent_id":1,"children":[]},{"id":3,"name":"Canine Therapy","emoji":"😌","parent_id":1,"children":[{"id":4,"name":"Massages","emoji":"💆","parent_id":3,"children":[]},{"id":5,"name":"Games","emoji":"🎾","parent_id":3,"children":[]}]}]};
return tree;

我试过使用 Object.keys(tree)[Object.keys(tree).length-1];但我看不出这将如何运作,因为它是多维的。

我希望有人可以建议这样做的方法。

谢谢

最佳答案

如果你想添加基于 parent_id 属性的新对象,可以在任何级别上,你可以创建递归函数,用 for...in 遍历对象> 如果 id 匹配,循环并将对象推送给 child 。

const data = {"id":1,"name":"Blooper Corp.","emoji":"🐕","parent_id":null,"children":[{"id":2,"name":"Food","emoji":"🥩","parent_id":1,"children":[]},{"id":3,"name":"Canine Therapy","emoji":"😌","parent_id":1,"children":[{"id":4,"name":"Massages","emoji":"💆","parent_id":3,"children":[]},{"id":5,"name":"Games","emoji":"🎾","parent_id":3,"children":[]}]}]}

function insert(data, obj, pid = null) {
  if (pid == obj.parent_id) {
    data.children.push(obj);
    return;
  }

  if (data.children) {
    data.children.forEach(e => insert(e, obj, e.id))
  }
}

function getLastId(data) {
  let result = null;

  function search(data) {
    if (!result || data.id > result) result = data.id;
    if (data.children)  data.children.forEach(search);
  }

  search(data);
  return result;
}

const newObj = {
  "id": getLastId(data) + 1,
  "name": "Music",
  "emoji": "",
  "parent_id": 4,
  "children": []
}

insert(data, newObj);
console.log(data)

关于javascript - 通过 id 查找元素并追加到对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58547545/

相关文章:

javascript - Keyup 来操作 div

JavaScript 检测哈希选择/复制

java - java 中具有多个元素的数组和其他问题

java - 获取 JSON 数组中的特定值 (Java)

c++ - 如何在一个未排序数组中找到另一个数组元素的不同索引?

php - 使用 .htaccess 压缩文件时出现 500 错误

javascript - jquery checkall 按钮和 uncheckall 按钮来选择其他复选框

javascript - 使用 Javascript 读取 JSON 文件

javascript - 插入数组对象

mysql - 在 MySQL 数据库中存储整数数组