繁体   English   中英

在JSON数组中查找值并从父节点中删除找到的节点

[英]Find Value in JSON array and delete found node from parent node

var trees = [
  {
    name: "alex",
    lastname: "watson",
    city: "California",
    state: "Alameda",
    childrens: [
      { name: "shane watson", city: "Troy", state: "Alabama" },
      {
        name: "adam watson",
        city: "Palmer",
        state: "Alaska",
        childrens: [
          { name: "ana watson", city: "Avondale", state: "Arizona" },
          { name: "ama watson", city: "Douglas", state: "Arizona" }
        ]
      }
    ]
  },
  {
    name: "adam",
    lastname: "ronaldo",
    city: "Bradenton",
    state: "Florida",
    childrens: [
      { name: "austin ronaldo", city: "Alhambra", state: "California" },
      {
        name: "kira ronaldo",
        city: "Calexico",
        state: "California",
        childrens: [
          { name: "sam ronaldo", city: "Chico", state: "California" },
          {
            name: "godwin ronaldo",
            city: "Eureka",
            state: "California",
            childrens: [
              { name: "michael ronaldo", city: "Buffalo", state: "New York" }
            ]
          }
        ]
      }
    ]
  }
];
  • 在JSON数组变量树中查找城市(例如city =“ Buffalo”或name =“ Godwin ronaldo”)
  • 从父树变量中删除找到的节点。

此函数提供匹配的节点:

function findMatchingNodes(nodes, predicate) {
  const results = [];
  function walk(node) {
    if (predicate(node)) {
      results.push(node);
    }
    (node.childrens || []).forEach(walk);
  }
  nodes.forEach(walk);
  return results;
}

函数调用

const matches = findMatchingNode(
  trees,
  (n) => n.city === 'Buffalo' || n.name === 'godwin ronaldo'
);

我要删除匹配的节点。

matches.forEach(node => {
  delete node;
});

输出:SyntaxError:在严格模式下删除局部变量

https://jsfiddle.net/5sve3nxc/

工作提琴推树子节点。 我想删除节点而不是推送。

当需要拼接数组时,如果谓词为true ,则需要从数组末尾进行迭代以维护索引。

 function deleteFromArray(array, predicate) { var i = array.length; while (i--) { if (predicate(array[i])) { array.splice(i, 1); continue; } if (array[i].children) { deleteFromArray(array[i].children, predicate); } } } var tree = [{ name: "alex", lastname: "watson", city: "California", state: "Alameda", children: [{ name: "shane watson", city: "Troy", state: "Alabama" }, { name: "adam watson", city: "Palmer", state: "Alaska", children: [{ name: "ana watson", city: "Avondale", state: "Arizona" }, { name: "ama watson", city: "Douglas", state: "Arizona" }] }] }, { name: "adam", lastname: "ronaldo", city: "Bradenton", state: "Florida", children: [{ name: "austin ronaldo", city: "Alhambra", state: "California" }, { name: "kira ronaldo", city: "Calexico", state: "California", children: [{ name: "sam ronaldo", city: "Chico", state: "California" }, { name: "godwin ronaldo", city: "Eureka", state: "California", children: [{ name: "michael ronaldo", city: "Buffalo", state: "New York" }] }] }] }]; deleteFromArray(tree, ({ city, name }) => city === 'Buffalo' || name === 'godwin ronaldo'); console.log(tree); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM