如何遍历两个数组的对象作为JavaScript中的以下输出
Posted
技术标签:
【中文标题】如何遍历两个数组的对象作为JavaScript中的以下输出【英文标题】:How to traversed object of two arrays as following output in JavaScript 【发布时间】:2020-07-14 09:05:49 【问题描述】:我有两个数组对象,我想将其处理为以下输出
var parts="Glenn": [12,22,32],
"Ryan": [13,23,33],
"Steve K": [14],
"Jerom":[15,25,35],
;
var labor=
"Glenn": [12,22,32],
"Ryan": [13,23,33],
"Steve K": [14],
"Nike":[16,26,36]
;
//Target output
[person:"Glenn",count:6,
person:"Ryan",count:6,
person:"Steve K",count:2,
person:"Jerom",count:3,
person:"Nike",count:3
];
这里的count表示数组的长度与key有关,person是key,如果key匹配,则添加它们的数组长度并将其分配给count,key显示为person,如果不匹配则将其复制到新数组中。请帮我如何实现上述数组对象
【问题讨论】:
【参考方案1】:迭代两个数组以查找出现次数,然后增加计数
var parts =
Glenn: [12, 22, 32],
Ryan: [13, 23, 33],
"Steve K": [14],
Jerom: [15, 25, 35]
;
var labor =
Glenn: [12, 22, 32],
Ryan: [13, 23, 33],
"Steve K": [14],
Nike: [16, 26, 36]
;
var arr = [];
for (let [key, value] of Object.entries(parts))
arr.push(
person: key,
count: value.length
);
for (let [key, value] of Object.entries(labor))
const found = arr.find(elem => elem.person === key);
if (found)
found.count += value.length;
else
arr.push(
person: key,
count: value.length
);
console.log(arr);
【讨论】:
【参考方案2】:您可以从这两个对象创建一组所有唯一键,然后迭代该组,根据 parts
和 labor
对象中相应元素的长度生成结果对象:
var parts =
"Glenn": [12, 22, 32],
"Ryan": [13, 23, 33],
"Steve K": [14],
"Jerom": [15, 25, 35],
;
var labor =
"Glenn": [12, 22, 32],
"Ryan": [13, 23, 33],
"Steve K": [14],
"Nike": [16, 26, 36]
;
let keys = new Set([...Object.keys(parts), ...Object.keys(labor)]);
let result =
keys.forEach(k => result[k] = (result[k] || 0) + (parts[k] || []).length + (labor[k] || []).length);
console.log(result);
【讨论】:
【参考方案3】:合并两个数组并减少它们。
这应该有效:
var parts =
"Glenn": [12, 22, 32],
"Ryan": [13, 23, 33],
"Steve K": [14],
"Jerom": [15, 25, 35],
;
var labor =
"Glenn": [12, 22, 32],
"Ryan": [13, 23, 33],
"Steve K": [14],
"Nike": [16, 26, 36]
;
const combined = [...Object.entries(parts), ...Object.entries(labor)];
const result = combined.reduce((res, curr) =>
const existing = res.find(e => e.person === curr[0]);
if (existing)
existing.count += curr[1].length;
else
res.push(
person: curr[0],
count: curr[1].length
)
return res;
, []);
【讨论】:
嗨,我已经在 Node.js 中尝试过这门课程,然后工作正常,但在 Angular 中出现错误,例如“类型 'ObjectConstructor' 上不存在属性'条目'” ***.com/questions/45422573/… 我已将其更新到 ES2017,但与 curr[1].length 类型“”上不存在属性“length”相关的一些错误 你做错了,curr[1]
是一个数组。【参考方案4】:
请参阅以下使用for...in
循环的代码:
var parts =
Glenn: [12, 22, 32],
Ryan: [13, 23, 33],
"Steve K": [14],
Jerom: [15, 25, 35]
;
var labor =
Glenn: [12, 22, 32],
Ryan: [13, 23, 33],
"Steve K": [14],
Nike: [16, 26, 36]
;
var counts = ;
// iterate through the parts and keep count
for (let key in parts)
if (key in counts)
counts[key] += parts[key].length;
else
counts[key] = parts[key].length;
// iterate through the labor and keep count
for (let key in labor)
if (key in counts)
counts[key] += labor[key].length;
else
counts[key] = labor[key].length;
var res = [];
// iterate through the counts and convert to an array
for (let key in counts)
res.push(
person: key,
count: counts[key]
)
【讨论】:
这里没有介绍 Jerom 和耐克 什么意思? 我的目标输出是 //目标输出 [person:"Glenn",count:6, person:"Ryan",count:6, person:"Steve K",count :2,人:“杰罗姆”,计数:3,人:“耐克”,计数:3];当我运行这段代码时,我没有得到 person:"Jerom",count:3, person:"Nike",count:3以上是关于如何遍历两个数组的对象作为JavaScript中的以下输出的主要内容,如果未能解决你的问题,请参考以下文章
如何循环遍历对象数组并根据 JavaScript 中的条件添加新的对象键?
08.18 javascript 06 数组 数组的概念 创建数组 读取数组中的元素 稀疏数组 添加和删除数组的元素 数组遍历 多维数组 数组的方法 类数组对象 作为数组的字符串
如何遍历类对象数组并在 JavaScript 中使用函数 [重复]