У меня есть массив, arr = [0, 0, 0, 0, 1, 1]. Аргумент, передаваемый в функцию, содержит этот массив, а также числовое значение, которое в этом примере составляет 1. Моя функция называется попарно и выглядит следующим образом:Метод массива Javascript для поиска indexOf за первым значением
function pairwise(arr, arg) {
...some code ...
}
pairwise([0, 0, 0, 0, 1, 1], 1);
Если элемент пара в массиве добавляет до второго аргумента, переданного в функцию, то мне нужно добавить индексы каждой уникальной пары и вернуть сумму индексы. Для этого примера сумма будет равна 10, потому что индекс 0 и 4 добавляется к 1, а также индекс 1 и 5 добавляют к единице, поэтому сумма индексов 0 + 4 + 1 + 5 = 10. Я не могу считать тот же показатель дважды.
Внутри моей функции я вычитаю arg из arr [i] внутри цикла for, который петли по длине массива. Затем я беру результат этого вычитания и использую arr.indexOf (result), чтобы найти пачку индексов, если она существует. Все работает нормально, пока я не столкнулся с этой проблемой. indexOf ищет только первое вхождение, и когда я запускаю свой код, он не учитывает второй 1 в arr, поэтому я не могу получить вторую пару. Моя сумма 4, когда оно должно быть 10. Вот остальная часть моего кода:
function pairwise(arr, arg) {
var array = [];
if (arr.length != 0) {
for (var i=0; i<arr.length; i++) {
if (arr.indexOf(arg - arr[i]) != -1) {
if (array.indexOf(i) === -1 && array.indexOf(arr.indexOf(arg-arr[i])) === -1) {
if (i !== arr.indexOf(arg - arr[i])) {
array.push(i,arr.indexOf(arg - arr[i]));
}
}
}
}
} else {
return 0;
}
console.log (array);
return array.reduce(function(a,b) {return a+b;});
}
pairwise([0, 0, 0, 0, 1, 1], 1);
Я также толкать результат в массив так я ограничен Array.prototype методов. Я пробовал искать другие методы, но я не могу найти то, что я могу реализовать, тем, что я делаю. Может быть, вы знаете об одном более легком способе сделать это? Мой вопрос в том, есть ли способ взглянуть на первое совпадение индекса indexOf. Должен ли я использовать другой метод для моего решения?