将数组内相同值的对象合并为一个新对象,并将其中一个值相加到新对象中,而且重复的对象则不能加到新对象
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"]
//]
【讨论】:
以上是关于将数组内相同值的对象合并为一个新对象,并将其中一个值相加到新对象中,而且重复的对象则不能加到新对象的主要内容,如果未能解决你的问题,请参考以下文章
在数组Vue Js中的另一个不同json对象中具有相同值的数组中的所有json对象中添加/合并新项目