另一个数组的数组子集

Array Subset of Another Array

如果我有一个数组,例如:

let arr = ["So 2545", "Cool 1123", "Mos 1999"] 

这是一个更大数组的子集:

let largerArr = ["So 2545", "Fun 1023", "Loss 2009", "Cool 1123", "Mos 1999"]

如何确定较大数组中每个匹配元素的索引 所以输出将是另一个数组(即让输出= [0,3,4])

您可以在 arr 上使用 .reduceRight() to make a look-up table of indexes, and then you .map() 将每个元素映射到查找中的索引 table:

const arr = ["So 2545", "Cool 1123", "Mos 1999"];
const largerArr = ["So 2545", "Fun 1023", "Loss 2009", "Cool 1123", "Mos 1999"];

const lut = largerArr.reduceRight((m, x, i) => m.set(x, i), new Map);
const output = arr.map(elem => lut.get(elem));
console.log(output);

使用 .reduceRight() 的目的是在项目出现不止一次(不是最后一次)时找到匹配出现在数组中的第一个索引

您可以使用 map() with indexOf():

const part = ["So 2545", "Cool 1123", "Mos 1999"];
const full = ["So 2545", "Fun 1023", "Loss 2009", "Cool 1123", "Mos 1999"];

const indexes = part.map(v => full.indexOf(v));

console.log(indexes);

如果您正在处理大型数组,构建查找的开销 table(如其他答案中所建议的)可能会变得值得。