无法使用Javascript根据键名合并两个不同的数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用Javascript根据键名合并两个不同的数组相关的知识,希望对你有一定的参考价值。

我正在尝试将每个键值对合并两个对象数组,但给出的结果与预期不符。我在下面用我的代码解释所有文档。

let arr1 = [
  
    "_id": "PU2-TEXT BOOK",
    "dispatchcount": 2,
    "totalDispatchValue": 5810,
    "totalDiscountValue": 150
  ,
  
    "_id": "PU2-Mathematics Part - 1 Text Book",
    "dispatchcount": 1,
    "totalDispatchValue": 4131,
    "totalDiscountValue": 150
  ,
  
    "_id": "Boys White & Blue Striped Half Shirt",
    "dispatchcount": 1,
    "totalDispatchValue": 4131,
    "totalDiscountValue": 150
  
]

let arr2 = [
  
    "_id": "PU2-TEXT BOOK",
    "pendingcount": 2,
    "totalPendingValue": 14157,
    "totalPendingDiscountValue": 1518
  ,
  
    "_id": "PU2-Accountancy Part - 2 Text Book",
    "pendingcount": 1,
    "totalPendingValue": 9002,
    "totalPendingDiscountValue": 834
  
]

let arr3 = arr1.map((item, i) => Object.assign(, item, arr2[i]));

console.log(arr3);

这里,如果找到任何匹配项,则需要根据键arr1 and arr2值合并两个_id,然后如果从第二个数组中找不到则两个对象都将合并,那么原始值将保持不变。我的预期输出如下。

预期输出::

[
"_id": "PU2-TEXT BOOK" ,
"dispatchcount": 2 ,
"totalDispatchValue": 5810 ,
"totalDiscountValue": 150 ,
"pendingcount": 2 ,
"totalPendingValue": 14157 ,
"totalPendingDiscountValue": 1518
,

    "_id": "PU2-Mathematics Part - 1 Text Book",
    "dispatchcount": 1,
    "totalDispatchValue": 4131,
    "totalDiscountValue": 150,
    "pendingcount": 0 ,
    "totalPendingValue": 0 ,
    "totalPendingDiscountValue": 0
  ,
  
    "_id": "Boys White & Blue Striped Half Shirt",
    "dispatchcount": 1,
    "totalDispatchValue": 4131,
    "totalDiscountValue": 150,
    "pendingcount": 0 ,
    "totalPendingValue": 0 ,
    "totalPendingDiscountValue": 0
  ,
  
    "_id": "PU2-Accountancy Part - 2 Text Book",
    "pendingcount": 1,
    "totalPendingValue": 9002,
    "totalPendingDiscountValue": 834,
    "dispatchcount": 0 ,
    "totalDispatchValue": 0 ,
    "totalDiscountValue": 0 
  
  ] 

所以我想按_id键合并两个对象数组。如果某些对象与其匹配,则两个对象将合并,如果第二个对象中不存在第一个数组中的对象,反之亦然,则对于不存在的那些键,它将与值0合并。

我正在尝试将每个键值对合并两个对象数组,但给出的结果与预期不符。我在下面用我的代码解释所有文档。让arr1 = [“ _id” ...

答案

您可以将一个对象用作默认值,并使用相同的_id将属性扩展到该对象。

另一答案

您可以组合数组arr1arr2,然后在其上组合reduce。找到匹配的索引(如果存在),然后合并两个对象:

另一答案

您可以将一个对象用作默认值,并使用相同的_id将其值分配给该对象。

以上是关于无法使用Javascript根据键名合并两个不同的数组的主要内容,如果未能解决你的问题,请参考以下文章

php数组根据键名怎么合并呢

php数组合并两个数组(一个数组做键名,另一个做值)

php 二维数组中取某个唯一的键值为键名。(通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组的元素为键值。)

javascript 数组对象根据相同属性值{key:value}合并两个对象

连接两个具有不同键名的表

使用 Linq 合并两个列表,并根据需要从不同的表中添加数据