当前位置: 首页 > 知识库问答 >
问题:

在数组中查找对象的计数会改变数组本身

齐磊
2023-03-14

我有一个关于查找数组中对象的计数的问题。我的数组是:

completePositions: any = [
    {
      totalPositions: [
        { position: "CNA", count: 2 },
        { position: "LVN", count: 5 },
        { position: "RNA", count: 8 }
      ]
    },
    {
      totalPositions: [
        { position: "CNA", count: 13 },
        { position: "LVN", count: 11 },
        { position: "RNA", count: 15 }
      ]
    }
  ];

我试图在totalPositions数组中找到每个位置的总计数,因此我的最终数组将如下所示:

totalPositionsCount = [
        { position: "CNA", count: 15 },
        { position: "LVN", count: 16 },
        { position: "RNA", count: 23 }
  ];

我创建了一个函数来求和“总位置”数组中的每个位置,并将总和推入总位置计数。我的函数完成了这项工作,我得到了总计数,但它改变了父数组“完整位置”,第一个“完整位置”的“总位置”被“总位置计数”数组替换。我试图创建一个备份的完整位置,并使用它的计算,仍然两个数组第一个总位置被替换为总位置计数数组。

我总结立场的职能是:

codeToShowTotalResources() {
    for (let totPos of this.completePositions) {
        for (let eachPos of totPos.totalPositions) {
            console.log("eachPos", eachPos);

            let postCountIndex = this.totalPositionsCount.findIndex(
                pos => pos.position == eachPos.position
            );

            if (postCountIndex != -1) {
                console.log("Already exists, sum up positions");
                let positionCount = this.totalPositionsCount[postCountIndex].count + eachPos.count;
                this.totalPositionsCount[postCountIndex].count = positionCount;
            } else {
                console.log("Add it for first time");
                this.totalPositionsCount.push(eachPos);
            }
        }

    }
}

如果我替换此.totalPositionScont[postCountIndex].count=positionCount this.totalPositionScont[postCountIndex]={position:eachPos.position,count:positionCount}编码> 然后它就可以正常工作了。我想知道我做错了什么,还是应该这样做。

我已经在stackblitz中打开了一个示例项目,任何帮助都将非常有用:)

共有1个答案

澹台庆
2023-03-14

执行此操作时:this.totalpositionscont.push(eachPos),变量eachPos表示来自completedpositions的条目。所以现在this.totalPositionsCountthis.completePositions都引用了同一个对象。如果修改该对象,更改将显示在两个位置,因为它是同一个对象。

这里有一个替代方法,使用减少和每个:

const completePositions = [
  {
    totalPositions: [
      {position: "CNA", count: 2},
      {position: "LVN", count: 5},
      {position: "RNA", count: 8}
    ]
  },
  {
    totalPositions: [
      {position: "CNA", count: 13},
      {position: "LVN", count: 11},
      {position: "RNA", count: 15}
    ]
  }
];

const totals = completePositions
  .map(x => x.totalPositions)
  .reduce((acc, totalPositions) => {
    totalPositions.forEach(({position, count}) => {
      acc[position] = (acc[position] || 0) + count;
    })
    return acc;
  }, {})
  
console.log(totals);
 类似资料:
  • 问题内容: 我知道以前也曾问过类似的问题,但是这个问题有些不同。我有一个未命名对象的数组,其中包含一个已命名对象的数组,我需要获取“名称”为“字符串1”的对象。这是一个示例数组。 更新: 我应该早先说过,但是一旦找到它,我想用一个编辑过的对象替换它。 问题答案: 您可以遍历数组并测试该属性:

  • 问题内容: 我有一个像这样的JSON对象: 我为特定的“ id”提供了“名称”的新值。如何在任何对象内替换特定“ id”的“名称”? 以及如何计算所有对象之间的组总数? 例如:将名称替换为“ test grp45”,ID =“ test1” 这是小提琴 http://jsfiddle.net/qLTB7/21/ 问题答案: 以下函数将搜索对象及其所有子对象/数组,并将键替换为新值。它会在全球范围内

  • 问题内容: 我有一个数组: 我无法更改数组的结构。我正在传递ID为,我想获取数组中的该对象。 如何在JavaScript或jQuery中做到这一点? 问题答案: 使用方法: 从MDN: 如果数组中的元素满足提供的测试功能,则该方法返回数组中的第一个值。否则返回。 如果要查找其 索引 ,请使用: 从MDN: 该方法返回满足提供的测试功能的数组中第一个元素的索引。否则返回-1。 如果要获取匹配元素的数

  • 问题内容: Swift在Underscore.js中是否有类似_.findWhere的内容? 我有一个类型为struct的数组,想检查array是否包含属性等于的struct对象。 尝试使用,但它们仅适用于基本类型,例如或。引发有关不符合协议之类的错误。 问题答案: FWIW,如果您不想使用自定义功能或扩展名,则可以: 首先生成数组,然后从中生成数组。 如果阵列很大,则可能需要执行以下操作: 或许

  • 所以这个问题以前被问过,但我的情况有点不同,因为我已经尝试了这个网站中建议的所有解决方案,我有一个多提及数组: 我还有另一个小数组: 我只想找到与这个“dup”在同一行的“original”。到目前为止,我尝试了查找、过滤和grep,但这些都没有解决我的问题。 我尝试过的代码:

  • 给定这样一组对象: 是否有一种方法可以使用ES6在一组对象中找到匹配的对象关键点(本例中为playerId),然后为这些匹配组合其他对象关键点(辅助和点),以便最终的数组如下所示: