如何遍历两个数组的对象作为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】:

您可以从这两个对象创建一组所有唯一键,然后迭代该组,根据 partslabor 对象中相应元素的长度生成结果对象:

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 中只显示前两个对象?

如何遍历类对象数组并在 JavaScript 中使用函数 [重复]

如何根据javascript中的键合并和替换两个数组中的对象?

如何以对象为成员循环遍历纯 JavaScript 对象