Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   При сравнении массивов не могу правильно вывести индексы совпадающих в них элементов! (https://javascript.ru/forum/misc/83982-pri-sravnenii-massivov-ne-mogu-pravilno-vyvesti-indeksy-sovpadayushhikh-v-nikh-ehlementov.html)

Vlasenko Fedor 05.05.2022 23:12

особо не тестил, но вроде так
const res = arr2.map(v => this.i = arr1.indexOf(v, ++this.i % arr1.length), {i: 0})

рони 05.05.2022 23:19

Vlasenko Fedor,
тоже самое ...
для теста
let 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];
let arr2 = [0.05, 0.1, 0.06, 0.06, 0.05, 0.05, 0.05, 0.01, 1.58];

рони 05.05.2022 23:21

Vlasenko Fedor,
let 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];
        let arr2 = [0.05,  0.1,  0.06, 0.06, 0.05, 0.05, 0.05,  0.01, 1.58];
        function arrIndex(a, b) {
            let ob = {};
            return b.reduce((ar, el) => {
                let k = ob[el] ??= 0;
                k = a.indexOf(el, k);
                ar.push(k);
                ob[el] = ++k;
                return ar;
            }, [])
        }
        const res = arr2.map(v => this.i = arr1.indexOf(v, ++this.i % arr1.length), {i: -1})
        console.log(res);
        console.log(arrIndex(arr1, arr2));

рони 05.05.2022 23:30

Vlasenko Fedor,
как вариант
let 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];
        let arr2 = [0.05,  0.1,  0.06, 0.06, 0.05, 0.05, 0.05,  0.01, 1.58];
        function arrIndex(a, b) {
            let ob = {};
            return b.reduce((ar, el) => {
                let k = ob[el] ??= 0;
                k = a.indexOf(el, k);
                ar.push(k);
                ob[el] = ++k;
                return ar;
            }, [])
        }
        const res = arr2.map(v => this[v] = arr1.indexOf(v, (this[v] ?? -1) + 1));
        console.log(res);
        console.log(arrIndex(arr1, arr2));


но использовать this ??? всё валится в window

Vlasenko Fedor 05.05.2022 23:35

const res = arr2.map(function(v){
    for (let i = 0; i < arr1.length; i++) {
        if (v === arr1[i] && !this[i]) {
            this[i] = 1
            return i
        }
    }
}, {})

this здесь не global,
Значение, используемое в качестве this при вызове функции callback

рони 05.05.2022 23:42

Цитата:

Сообщение от Vlasenko Fedor
this здесь не global,

для стрелочных функций this, то где они созданы. примеры выше глобал.
последний пример #15 снова не рабочий

рони 05.05.2022 23:49

Vlasenko Fedor,
рабочий вариант
const res = arr2.map(function(v) {
            for (let i = 0; i < arr1.length; i++) {
                if (v === arr1[i] && !this[i]) {
                    this[i] = 1
                    return i
                }
            }
        }, {})

Vlasenko Fedor 05.05.2022 23:51

Цитата:

Сообщение от рони
снова не рабочий

поправил this в 15, а результат вроде правильный

рони 05.05.2022 23:53

Vlasenko Fedor,
ок! )))

Vlasenko Fedor 05.05.2022 23:54

рони,
за тобой не поспеешеь :). не могу + :-/


Часовой пояс GMT +3, время: 09:14.