#javascript #jquery
#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);
Этот пример, который я вставил в свой код, работает хорошо, то есть я выполняю сравнение, и оно работает без проблем.
Что я хочу сделать? (Это то, что я понятия не имею, как сделать)
Как вы можете видеть, in $array1
— это значение 18753933, а in $array2
— это также значение 18753933
.
Я хочу, чтобы при повторении значения это учитывалось, в $array1
значении 18753933
— 2
время, а значение 18771982
— 1
время.
Я хочу увидеть что-то вроде этого:
18753933 repeats: 2
18771982 is repeated: 1
не могли бы вы дать мне представление о том, чего мне не хватает? Мне всегда трудно сравнивать массивы. Спасибо.
Комментарии:
1.
('18753933','18753933','18771982')
не является массивом. Он должен быть завернут внутрь[]
2. Если вы правы, я пропускаю скобки, но это гипотетический пример, идея в том, что я спрашиваю, как я могу подсчитать повторяющиеся значения и сохранить отдельный счет?
Ответ №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. Довольно хорошее решение 1. Я думаю, вам следует добавить способ с простыми циклами, поскольку OP кажется начинающим.
Ответ №2:
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)
Ответ №3:
Похоже, вам нужно будет создать массив объектов. Что-то вроде:
<!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 = resu<
// 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
amp; jQuery
но код есть
PHP
. Так что я ошибаюсь в любом случае.