比较两个阵列并计算事件

时间:2019-04-13 11:15:16

标签: javascript jquery

我有两个数组

$array1=('18753933','18753933','18771982')
$array2=('18753933','18771982')

我正在遍历每个数组,以比较每个数组中相同的值

var contarArticulosCargados=0;

for(var $i=0;$i<$array1.length;$i++) {
    for(var $j=0;$j<$array2.length;$j++) {
        if($array1[$i]===$array[$j]) {
            countArticulosCargados++;
        }
    }
}

console.log(countArticlesLoaded);

我在代码中放入的这个示例很好用,也就是说,我正在进行比较,并且没有问题。

我想做什么? (这就是我不知道该怎么做)

您在$array1中看到的值是18753933,在$array2中也是值18753933

我想要的是当重复该值时,将其计算在内,在$array1中,值187539332倍,而值18771982是{{1 }}时间。

我想看到这样的东西:

1

您能告诉我我所缺少的吗?我总是发现很难在数组之间进行比较。谢谢。

3 个答案:

答案 0 :(得分:1)

仅映射到array2并获取已过滤array1的长度。

const a1 = ['18753933','18753933','18771982'];
const a2 = ['18753933','18771982'];

const res = a2.map(e => ({[e]: a1.filter(k => k === e).length}));
console.log(res);

要删除未找到的元素,可以先过滤

a2.filter(e => a1.includes(e)).map(e => ({[e]: a1.filter(k => k === e).length}))

或之后

a2.map(e => ({[e]: a1.filter(k => k === e).length})).filter(e => Object.values(e).every(x => x > 0));

或使用reduce

const a1 = ['18753933','18753933','18771982'];
const a2 = ['18753933','18771982'];

const res = a2.reduce((a, b) => {
  const l = a1.filter(e => e === b).length;
  if (l) a[b] = l;
  return a;
}, {});

console.log(res);

答案 1 :(得分:0)

看起来您需要做的是创建一个对象数组。像这样:

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
</head>

<body>

  <h2>JavaScript Array of Objects</h2>

  <p id="demo"></p>

  <script>
    var array1 = ['18753933', '18753933', '18771982'];
    var array2 = ['18753933', '18771982'];
    var contarArticulosCargados = [];

    // for each of the numbers in array2
    for (var i = 0; i < array2.length; i++) {

      // create an object
      contarArticulosCargados.push({
        articulos: array2[i],
        contar: 0
      });

      // for each of the numbers in array2
      for (var j = 0; j < array1.length; j++) {

        if (array2[i] === array1[j]) {
          // increment counter for the object
          var foo = contarArticulosCargados.length - 1;
          contarArticulosCargados[foo].contar++;

        }
      }
    }

    // create string for result
    var result = "";
    for (var k = 0; k < contarArticulosCargados.length; k++) {
      result += contarArticulosCargados[k].articulos + " repeats: " + contarArticulosCargados[k].contar + ". ";
    }

    // send result to html
    document.getElementById("demo").innerHTML = result;
    // or console as string
    console.log(result);
    // or console as array
    console.log(contarArticulosCargados);

  </script>
</body>

</html>

您可以复制并粘贴html进行测试,以查看结果。

您可能想切换array1和array2,但我认为我有正确的方法(根据您的示例)。

将array1更改为其他内容可能有助于可视化

var array1 = ['18753933', '18753933', '18771982', '18771982', '18771982', '18771982', '18771982', '18771982', '18771982'];

如果array1如上,则输出为:

18753933 repeats: 2. 18771982 repeats: 7. 

或者,如果array1如问题中最初所述,则输出为:

18753933 repeats: 2. 18771982 repeats: 1. 

但是,问题标签当然是JavaScriptjQuery,但是代码是 PHP。所以我错了。

答案 2 :(得分:0)

const a1 = ['18753933','18753933','18771982'];
const a2 = ['18753933','18771982'];

const r = {};

a2.forEach(_ => r[_] = 0)

a1.forEach(_ => {
    if (r[_] === 0 || r[_]) {
        r[_] += 1
    }
})

console.log(r)