另一个数组的数组子集
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()
的目的是在项目出现不止一次(不是最后一次)时找到匹配出现在数组中的第一个索引
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(如其他答案中所建议的)可能会变得值得。
如果我有一个数组,例如:
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()
的目的是在项目出现不止一次(不是最后一次)时找到匹配出现在数组中的第一个索引
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(如其他答案中所建议的)可能会变得值得。