При сравнении двух массивов не могу правильно вывести индексы совпадающих в них элементов
Доброго времени суток уважаемые форумчане.Помогите решить проблему,я в тупике в полном и не знаю что с этим делать,буду рад любой помощи. Суть проблемы: есть два массива:
var arr1 = [1.58, 0.12, 0.1, 0.06, 0.06, 0.06, 0.05, 0.05, 0.05, 0.05, 0.05, 0.01];
var arr2 = [1.58, 0.1, 0.06, 0.06, 0.05, 0.05, 0.05, 0.05, 0.01];
Мне нужно сравнить второй массив с первым и вывести в новый массив индексы одинаковых элементов которые соответствуют индексам arr1,то есть в идеале должен получиться массив с такими индексами
index_etalon = [0,2,3,4,6,7,8,9,11];
Я перерыл весь интернет в итоге нашёл вот этот код:
var arr1 = [1.58, 0.12, 0.1, 0.06, 0.06, 0.06, 0.05, 0.05, 0.05, 0.05, 0.05,0.01];
var arr2 = [1.58, 0.1, 0.06, 0.06, 0.05, 0.05, 0.05, 0.05,0.01];
const index_etalon = [0,2,3,4,6,7,8,9,11];
var findMatch = function(arr2_Iter, arr1_Iter) {
let ary = [];
for(let i = 0;i < arr1_Iter.length; i++){
for(let z = 0; z < arr2_Iter.length; z++){
if(arr1_Iter[i] == arr2_Iter[z]){
ary.push(i);
arrIndexDelDuble = [...new Set(ary)];
}
}
}
return ary;
}
var indexiReal = findMatch(arr2, arr1)
код работает и выдаёт вот что
[0,2,3,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11]
единственное что у меня вышло улучшить это удалить дубли и получилось так
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
но это не тот результат,в идеале должно быть так
index_etalon = [0,2,3,4,6,7,8,9,11];
посмотреть что вышло вы можете тут jsfiddle.net/navigatorus/znLptxa7/74/
У кого есть идеи или готовое решение,помогите,буду очень признателен!
Ответы (1 шт):
Если одного совпадения достаточно, можно перейти к следующей итерации с помощью оператора прерывания break:
var arr1 = [1.58, 0.12, 0.1, 0.06, 0.06, 0.06, 0.05, 0.05, 0.05, 0.05, 0.05,0.01];
var arr2 = [1.58, 0.1, 0.06, 0.06, 0.05, 0.05, 0.05, 0.05,0.01];
const index_etalon = [0,2,3,4,6,7,8,9,11];
var findMatch = function(arr2_Iter, arr1_Iter) {
let arr2_IterCopy=arr2_Iter.slice();
let ary = [];
for(let i = 0;i < arr1_Iter.length; i++){
for(let z = 0; z < arr2_IterCopy.length; z++){
if(arr1_Iter[i] == arr2_IterCopy[z]){
ary.push(i);
arr2_IterCopy.splice(z,1);
break
}
}
}
return ary;
}
console.log(findMatch(arr2, arr1));