получить индекс всех вхождений значения изнутри двойного цикла 'for' - PullRequest
0 голосов
/ 19 февраля 2019

Прежде всего, не стесняйтесь редактировать заголовок, если он недостаточно точен.

JS совершенно не моя территория.Я пытаюсь написать этот пользовательский обратный вызов JS и, кроме строки захвата индекса, он делает то, что мне нужно.Однако, поскольку я уже нахожусь в двойном цикле for, я понятия не имею, как правильно нажимать

(под правильным я подразумеваю: индексы, под которыми каждый экземпляр значения, присутствующего в «активном держателе», варьировался до нажатия на «частичные_данные 'var)

индексы в индексы var.Как он выглядит сейчас, он будет возвращать только индекс первого вхождения.

var full_data = ['a', 'b', 'c', 'd', 'a', 'g', 'g', 'h']
var partial_data = []
var active_holder = ['a', 'g']
var indexes = []

for (j = 0; j < full_data.length; j++) {

    for (z = 0; z < active_holder.length; z++) {

        if (active_holder[z].includes(full_data[j])) {

            indexes.push(full_data.indexOf(full_data[j]));
            partial_data.push(full_data[j]);
        }
    }
}

console.log(partial_data) // * ['a', 'a', 'g', 'g'] // 
console.log(indexes) // * [0, 0, 5, 5] // WRONG, should be 0,4,5,6 or something along

Есть предложения, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Вы снова звоните indexOf, а push().Вы должны просто push() j.

indexOf : возвращает индекс для первого вхождения значения в массиве

var full_data = ['a', 'b', 'c', 'd', 'a', 'g', 'g', 'h']
var partial_data = []
var active_holder = ['a', 'g']
var indexes = []

for (j = 0; j < full_data.length; j++) {

    for (z = 0; z < active_holder.length; z++) {

        if (active_holder[z].includes(full_data[j])) {

            indexes.push(j);
            partial_data.push(full_data[j]);
        }
    }
}

console.log(partial_data) // * ['a', 'a', 'g', 'g'] // 
console.log(indexes) // * [0, 0, 5, 5] // WRONG, should be 0,4,5,6 or something along
0 голосов
/ 19 февраля 2019

Вы можете использовать метод reduce и вернуть один объект как с индексами, так и с частичными данными.

var data = ['a', 'b', 'c', 'd', 'a', 'g', 'g', 'h']
var active = ['a', 'g']

const {
  index,
  partial
} = data.reduce((r, e, i) => {
  if (active.includes(e)) {
    r.index.push(i)
    r.partial.push(e)
  }
  return r
}, {
  index: [],
  partial: []
})


console.log(index)
console.log(partial)
0 голосов
/ 19 февраля 2019

Вы можете использовать уменьшить и включает

const fullData = ['a', 'b', 'c', 'd', 'a', 'g', 'g', 'h']
const active = ['a', 'g']

let {partial, index} = fullData.reduce((op,inp,index)=>{
  if( active.includes(inp) ){
    op.partial.push(inp)
    op.index.push(index)
  }
  return op
},{partial:[],index:[]})

console.log(partial)
console.log(index)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...