Google Apps Script: найдите местоположение каждого элемента в массиве - PullRequest
0 голосов
/ 18 апреля 2020

Я хотел бы пройти через каждый элемент в одномерном массиве и выполнить indexOf для другого одномерного массива, чтобы определить, где он соответствует.

Если у меня есть:

Array 1 = ["a","d","e"]
Array 2 = ["a","b","c","d","e","f"]

Я бы как преобразовать массив 1 из значений в места сопоставления, в которых он станет: [0,3,4].

Я пробовал приведенное ниже уравнение, но оно не сработало. Я думал, используя forEach () , я мог бы go через каждый элемент в массиве 1. Затем я мог запустить функцию для выполнения indexOf () над массивом 2 для каждого элемента. Что я делаю не так ??

var array1 = ["a","d","e"];
var array2 = ["a","b","c","d","e","f"];

var array1count = array1.forEach( function (e) { array2.indexOf( e )});

Logger.log(array1count)

Ответы [ 3 ]

4 голосов
/ 18 апреля 2020

Если array1 имеет тот же порядок, что и array2, вы можете взять закрытие по индексу и использовать некоторое время l oop внутри обратного вызова для отображения найденных индексов.

var array1 = ["a", "d", "e"],
    array2 = ["a", "b", "c", "d", "e", "f"],
    indices = array1.map((i => v => {
        while (array2[++i] !== v) ;
        return i;
    })(-1));

console.log(indices); // [0, 3, 4]

Для не определенного порядка вы ни один не используете l oop для сбора индексов, а другой - для отображения собранных индексов.

var array1 = ["a", "d", "e"],
    array2 = ["a", "b", "c", "d", "e", "f"],
    indices = array1.map(
        Map.prototype.get,
        array2.reduce((m, v, i) => m.set(v, i), new Map)
    );

console.log(indices); // [0, 3, 4]
1 голос
/ 18 апреля 2020

forEach() возвращает undefined, вы можете попробовать использовать Array.prototype.reduce () :

Метод reduce() выполняет функцию редуктора (которую вы обеспечить) для каждого элемента массива, в результате чего получается одно выходное значение.

var array1 = ["a","d","e"];
var array2 = ["a","b","c","d","e","f"];

var array1count = array2.reduce(function(acc, curr, i) { 
  if(array1.includes(curr)) //check if the current item is present in array1 
    acc.push(i);
  return acc;
},[]);

console.log(array1count);
0 голосов
/ 18 апреля 2020

Я запустил это уравнение, и оно сработало. Кажется, все довольно просто и понятно. Надеюсь, я здесь не пропущу что-то, что разрешают другие ответы.

var array1 = ["a","d","e"];
var array2 = ["a","b","c","d","e","f"];

var array1count = array1.map( function (item) { return array2.indexOf(item) });

Logger.log(array1count)
...