如果数组包含重复项,则将两个值合并为一个

Posted

技术标签:

【中文标题】如果数组包含重复项,则将两个值合并为一个【英文标题】:if array contains duplicate, merge both values as one 【发布时间】:2021-11-12 07:21:07 【问题描述】:

我有一个看起来像这样的数组:

有没有一种方法,当另一个对象“AAPL”被添加到数组中时,费用和金额被添加并且 AAPL 将一个对象保留在数组中?

提前谢谢你!

【问题讨论】:

是的,您可以编写代码来执行此操作。如果 Stack Overflow 无法正常工作但不会为您编写代码,则 Stack Overflow 可以帮助您处理现有代码。 您的问题的答案是,“是的,有办法”。您可以尝试通过提高对函数和数组原型的理解来自己解决问题,或者请/付钱给某人为您解决问题。然而,*** 不是这个地方。 【参考方案1】:

我不想假设“AAPL”总是在数组中。

首先检查新项目是否在数组中。如果没有,我将返回并结束通话(但您可能希望将其附加到数组中,因为它是一个新项目)。

如果是,则替换当前对象(或部分对象,在这种情况下,我只做了费用和金额)

function addPortfolioItem(item) 
    const index = returnPortfolioHoldingIndex(item);
    if (index = -1) 
        // Returning if not found - You may wish to append to the array as mentioned above
        return;
     else 
        // Overwrite the object within the array with the new object
        portfolioHoldings[index].fees = item.fees;
        portfolioHoldings[index].amount = item.amount;
    


function returnPortfolioHoldingIndex() 
    const tickerSymbolToSearch = "AAPL";
    return portfolioHoldings.findIndex(item => item.ticker_symbol === tickerSymbolToSearch);

【讨论】:

谢谢!这正是我所需要的。你是对的,AAPL 并不总是在数组中。但是你能帮我重写吗?抱歉,也许我必须清楚我的代码。我正在使用 GraphQl 来获取数组。 const 加载,错误,数据 = useQuery(PORTFOLIO_HOLDINGS);它记录了上面的屏幕截图。我必须使用“数据”而不是项目吗? 函数参数名称可以是任何名称,但您应该使用您所描述的数据调用该函数。 addPortfolioItem(数据);此函数调用会将数据的值复制到项目中,或者您可以重命名此数据。如果它解决了您的问题,请接受答案!【参考方案2】:

首先识别条目,然后将另一个整数添加到值中。

这取决于您现在如何更新该对象 - 如果它始终处于 0 位置,那么只需投资组合Holdings[0][amount] += number;

如果不是,则遍历所有并检查ticker_symbol == AAPL,然后通过添加所需数量来更新该数组值。

【讨论】:

以上是关于如果数组包含重复项,则将两个值合并为一个的主要内容,如果未能解决你的问题,请参考以下文章

如何合并子数组值并删除重复项?

xslt2+ 如何将组与任何匹配的元素组合并删除元素的重复项

使用值将数组中对象的属性合并在一起并删除重复项

合并两个数组,并且把相同的数值覆盖掉

R:在第一列中按重复项合并行

删除对象数组重复项并将非重复值存储在数组中