我有两个数组
$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
中,值18753933
是2
倍,而值18771982
是{{1 }}时间。
我想看到这样的东西:
1
您能告诉我我所缺少的吗?我总是发现很难在数组之间进行比较。谢谢。
答案 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.
但是,问题标签当然是JavaScript
和jQuery
,但是代码是
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)