将数组内相同值的对象合并为一个新对象,并将其中一个值相加到新对象中,而且重复的对象则不能加到新对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数组内相同值的对象合并为一个新对象,并将其中一个值相加到新对象中,而且重复的对象则不能加到新对象相关的知识,希望对你有一定的参考价值。

我已经写出了大概的样子,目前产生的问题就是重复输入有提示但还是会相加,我应该怎么去解决呢,希望大神能帮帮我。
数据格式是这样的
BarCode: "190817162250280012", ColorID: "1A", FabricID: "F0143", ProdID: "017", Rolls: 10, ScanSheetSeries: "TC190817001", Type: "1", VatNo: "1" ,
BarCode: "190822153259255103", ColorID: "黑", FabricID: "F0244", ProdID: "018", Rolls: "3.00", ScanSheetSeries: "TC190822001", Type: "1", VatNo: "125" ,


我有一种笨办法 肯定可以实现  给你分享一下  学习一下你的办法

参考技术A 你换一种循环吧 不用forEach 在有重复的时候 可以break 跳出循环来自:求助得到的回答 参考技术A $arr=array(
0=>array(
'tid'=>26,
'tname'=>'内衣',
'id'=>1
),
1=>array(
'tid'=>25,
'tname'=>'女装',
'id'=>1
),
2=>array(
'tid'=>27,
'tname'=>'男装',
'id'=>2
),
3=>array(
'tid'=>28,
'tname'=>'运动',
'id'=>2
),
4=>array(
'tid'=>29,
'tname'=>'户外',
'id'=>2
),
5=>array(
'tid'=>30,
'tname'=>'男鞋',
'id'=>3
),
6=>array(
'tid'=>31,
'tname'=>'女鞋',
'id'=>3
),
7=>array(
'tid'=>32,
'tname'=>'个人化妆',
'id'=>4
),
);
$item=array();
foreach($arr as $k=>$v)
if(!isset($item[$v['id']]))
$item[$v['id']][]=$v;
else
$item[$v['id']][]=$v;


print_r($item);

如何在数组中找到具有相同键值的对象?

【中文标题】如何在数组中找到具有相同键值的对象?【英文标题】:How can I find objects with same keys values in array? 【发布时间】:2022-01-11 14:50:43 【问题描述】:

我有一个如下所示的对象数组:

  const arr = [
     type: 'type', fields: ['field1'] ,
     type: 'type2' ,
     type: 'type', fields: ['field2'] ,
  ]

并且我需要找到具有相同类型的对象来合并其中的字段键,如下所示:

  const arr = [
     type: 'type', fields: ['field1', 'field2'] ,
     type: 'type2' ,
     type: 'type', fields: ['field1', 'field2'] ,
  ]

我的计划是通过数组进行过滤,但我的问题是我不知道哪种类型会向我发送 API,因此按 item.type 过滤对我不起作用。

【问题讨论】:

欢迎来到 Stack Overflow!访问help center,使用tour 了解内容和How to Ask。请首先>>>Search for related topics on SO,如果您遇到困难,请发布您的尝试的minimal reproducible example,并使用[<>] 记录输入和预期输出sn-p 编辑器。 【参考方案1】:

如果那是您想要的确切解决方案。以下代码 sn -p 可能会对您有所帮助。

    const arr = [
       type: 'type', fields: ['field1'],
       type: 'type2',
       type: 'type', fields: ['field2']
    ]
    
    const modifyArr = (data) => 
      let res = [];
      arr.map((item) => 
          if(item.type == data.type)
            if(Object.keys(item).includes('fields'))
              res = res.concat(item.fields);
            
          
      );
      return Object.keys(data).includes('fields') ?  type: data.type, fields: res  :  type: data.type ;



let newArr = arr.map(item => modifyArr(item));

console.log(newArr); 

这将打印出来

[
     type: 'type', fields: ['field1', 'field2'] ,
     type: 'type2' ,
     type: 'type', fields: ['field1', 'field2'] ,
  ]

【讨论】:

【参考方案2】:

const arr = [ type: 'type', fields: ['field1'],  type: 'type2',  type: 'type', fields: ['field2']];

result = arr.map(( type ) => 
    const fields = arr.filter((o) => o.type === type).flatMap((e) => e.fields);
    return  type, ...fields[0] ?  fields  :  ;
);

console.log(result);
//[
//    "type": "type", "fields": ["field1", "field2"],
//    "type": "type2",
//    "type": "type", "fields": ["field1", "field2"]
//]

【讨论】:

以上是关于将数组内相同值的对象合并为一个新对象,并将其中一个值相加到新对象中,而且重复的对象则不能加到新对象的主要内容,如果未能解决你的问题,请参考以下文章

如何组合 2 个对象并在其中合并数组 [重复]

在数组Vue Js中的另一个不同json对象中具有相同值的数组中的所有json对象中添加/合并新项目

如何在数组中找到具有相同键值的对象?

JavaScript 将数组中具有相同值的对象 取出组成新的数组

JavaScript:删除共享相同属性值的对象的重复项

如何将具有相同属性的对象合并到一个数组中?