JavaScript 比较数组来标记特定元素的出现

标签 javascript arrays algorithm

我有一个包含 n 个数组,其中包含汽车信息(colorcompany),如下所示:
el[0] -> 颜色值
el[1] -> 公司值(value)

我的目标是显示可以找到多少家汽车公司的颜色。

例如这个数组

var array = [
  ['red', 'Ford'],
  ['blue', 'Ford'],
  ['green', 'Ford'],
  ['red', 'Ford'],
  ['red', 'Renault'],
  ['blue', 'Renault'],
  ['green', 'Opel'],
  ['red', 'Opel']
];

应更改如下:

 result = [
  ['red', 'Ford', '3: Ford, Renault, Opel'],
  ['blue', 'Ford', '2: Ford, Renault'],
  ['green', 'Ford', '2: Ford, Open'],
  ['red', 'Renault', '3: Ford, Renault, Opel'],
  ['blue', 'Renault', '2: Ford, Renault'],
  ['green', 'Opel', '2: Ford, Opel'],
  ['red', 'Opel', '3: Ford, Renault, Opel']
 ];

说明:
3 公司的颜色为红色:福特、雷诺、欧宝
2 公司的颜色为蓝色:福特、雷诺
2 公司的颜色为绿色:福特、欧宝

这就是我认为可以解决的方法,但我不确定这是否是正确的方法:
1.循环遍历每个数组并过滤颜色以获取所有适用于它的公司
2. 循环过滤器响应并删除重复项
3.再次循环主数组,并将步骤2的结果分配给具有过滤颜色的相应数组

最佳答案

你可以这样处理:

var array = [
  ['red', 'Ford'],
  ['blue', 'Ford'],
  ['green', 'Ford'],
  ['red', 'Ford'],
  ['red', 'Renault'],
  ['blue', 'Renault'],
  ['green', 'Opel'],
  ['red', 'Opel']
];

// To store calculated counts
var cache = {};

var result = array.map(item => {
  var key = item[0];

  // Do processing only if the item isn't found in cache
  if (!cache[key]) {
    var models = array
      // Get all the same colored items
      .filter(item1 => {
        return item1[0] === key;
      })
      // Get the list of models
      .map(item1 => {
        return item1[1];
      })
      // Extract only the unique values
      .filter((item1, i, arr) => {
        return arr.indexOf(item1) === i;
      });

    // Put the calculation in cache
    if (!cache[key]) {
      cache[key] = `${models.length}: ${models.join(', ')}`;
    }
  }

  // Append the result into original item
  item.push(cache[key]);
  
  return item;
});

console.log(result);

我使用了中间对象缓存来节省一些处理时间,因为必须对一种颜色执行多次相同的操作。

关于JavaScript 比较数组来标记特定元素的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47713526/

相关文章:

c++ - 在编译时将两个或多个不同大小的数组合并为一个数组

arrays - 多模式匹配算法

java - 在极其庞大的数据集中查找重复项

javascript - 创建 View 时 Google Charts 抛出 "cannot read property ' 1' of undefined"

javascript - JS "for (var key in arr)"> 抛出我自己的 Array.prototypes,但不是固有的。为什么?

javascript - Angular 2 - Twitter 搜索 api - 预检时仅应用程序身份验证错误 400

javascript - 在 Array.prototype.map 中返回一个迭代步骤

java - 如何将支票转换为包含小数位的文字

javascript - 如何在 js 数组中搜索?

algorithm - 如何旋转居中六边形位板?