在一次采访中,我被要求将两个多维数组处理成一个对象,其格式类似于:

{
   'sally': {
       id: 1,
       metrics: {
           sales: 6000,
           missed: 0
       }
   },
   'bob': {
       id: 2,
       metrics: {
           sales: 1000,
           missed: 0
       }
   },..
}

然而,我无法理解.我try 过嵌套for循环,但问题是我担心执行时间.根据采访者的说法,它的执行时间应该是O(n),如果我正确理解大O,嵌套for循环的执行时间应该是O(n^2)左右.以下是我目前掌握的代码:

// returns a dictionary
let testIAteShitOn = (requested_user = false, requested_metric = false) => {
  // is the array always organized the same?
  let users = [
    [1, "Sally"],
    [2, "Bob"],
    [3, "George"],
  ];

  // same here, is this always organized the same?
  //  are there only ever 2 metrics?
  let metrics = [
    [1, "sales", 5000],
    [1, "sales", 1000],
    [3, "missed", 1000],
    [2, "sales", 1000],
  ];

 for (let i = users.length - 1; i >= 0; i--) {
    let id = users[i][0];
    let data = findDiamond(id, metrics);

 }

 return obj;

}


let findDiamond = (id, array) => {
    return array.filter((item) => item[0] == id);
}

如果您能在这方面提供任何帮助,并就在哪里以及如何最好地学习算法、数据 struct 和大O提出建议,我将不胜感激.

推荐答案

您可以使用两个单独的循环来获得所需的结果,其中helper对象具有id对每个用户的引用.

const
    users = [[1, "Sally"], [2, "Bob"], [3, "George"]],
    metrics = [[1, "sales", 5000], [1, "sales", 1000], [3, "missed", 1000], [2, "sales", 1000]],
    references = {},
    result = {};

for (const [id, name] of users) {
    references[id] = result[name] = { id, metrics: { sales: 0, missed: 0} };
}

for (const [id, metric, value] of metrics) {
    references[id].metrics[metric] += value;
}
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Javascript相关问答推荐

订阅操作顺序

从外部访问组件变量-Vueejs

fetch在本地设置相同来源的cookie,但部署时相同的代码不会设置cookie

Klaro与Angular的集成

在页面上滚动 timeshift 动垂直滚动条

如何在Javascript中的控制台上以一行形式打印循环的结果

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

如何粗体匹配的字母时输入搜索框使用javascript?

html + java script!需要帮助来了解为什么我得到(无效的用户名或密码)

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

如何在JavaScript文件中使用Json文件

提交链接到AJAX数据结果的表单

使用领域Web SDK的Vite+Vue应用程序中的Web程序集(WASM)错误

在forEach循环中获取目标而不是父对象的属性

在浏览器中触发插入事件时检索编码值的能力

第三方包不需要NODE_MODULES文件夹就可以工作吗?

如何在我的Next.js项目中.blob()我的图像文件?

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

如何在Java脚本中对列表中的特定元素进行排序?

如何在和IF语句中使用||和&;&;?