【问题标题】:Find index of array of objects inside another array [closed]在另一个数组中查找对象数组的索引[关闭]
【发布时间】:2021-12-26 10:09:32
【问题描述】:

我有 2 个对象数组,如下所示。
我想通过在父数组'array1'中搜索子数组'sub'来找到索引,保持id为键。

我想在array1中搜索子数组并找到像[0,1,2,3]这样的值的索引。

因此我的预期输出应该是 [0,1,2,3]。

//parent array    
 array1 = [
    { "id": "1111", "name": "a1"},
    { "id": "2222", "name": "a2" },
    { "id": "3333", "name": "a3" },
    { "id": "4444", "name": "a4" },
    {"id": "5555", "name": "a5" },
];


//child array
 sub = [
    { "id": "1111"},
    { "id": "2222" }        
];

我正在努力在父数组上找到子数组 因为它包括具有键值的对象数组。

【问题讨论】:

  • 为什么要来自array1 的所有索引?为什么你有sub 数组。两个数组的关系是什么?请添加想要的真实结果。
  • 是否总是{"id": some_number}sub 元素?如果array1 中没有这样的元素会发生什么?
  • @NinaScholz 子数组基本上是在运行时生成的。如果子数组包含在array1中,那么我们必须从array1中添加子数组值的所有索引。如果我从子数组中删除任何值,那么相应的索引也应该被删除。请帮我解决这个添加/删除部分。
  • @raina77ow 是的,它将始终仅在此模式下,并且 array1 将始终具有从系统生成的值。它永远不能为空。

标签: javascript arrays


【解决方案1】:

您可以对所有idsub 使用Set,然后过滤索引以查找idarray1

const
    array1 = [{ id: "1111", name: "a1" }, { id: "2222", name: "a2" }, { id: "3333", name: "a3" }, { id: "4444", name: "a4" }, { id: "5555", name: "a5" }],
    sub = [{ id: "1111" }, { id: "2222" }],
    subIds = new Set(sub.map(({ id }) => id)),
    result = [...array1.keys()].filter(i => subIds.has(array1[i].id));

console.log(result);

【讨论】:

  • 谢谢@Nina。它工作正常。但是我对此还有一个要求,例如如果我从 sub 中删除 {id: "1111"},那么输出应该是仅输出 - [1]。但目前它显示为 [0,1]。如果元素从子数组中删除,如何合并删除索引的逻辑?请帮帮我。
  • 它也应该适用于此。
  • 现在工作正常.. 谢谢:)
【解决方案2】:

您可以在 for 循环中比较两个数组,如下所示。

const array1 = [
      { id: "1111", name: "a1" },
      { id: "2222", name: "a2" },
      { id: "3333", name: "a3" },
      { id: "4444", name: "a4" },
      { id: "5555", name: "a5" },
    ];
    
    //child array
    const sub = [{ id: "1111" }, { id: "2222" }];
    
    const indexes = [];
    
    for (let i = 0; i <= sub.length - 1; i++) {
        const subID = sub[i].id;
      for (let j = 0; j <= array1.length - 1; j++) {
          const parentID = array1[j].id;
    
          if(parentID === subID){
              indexes.push(j)
          }
      }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2016-02-14
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多