JavaScript,返回所有匹配原数组中子字符串的索引;

czfnxgou  于 2023-04-04  发布在  Java
关注(0)|答案(4)|浏览(117)

我有一个数组,如果原始数组匹配子字符串,我希望返回新数组中的索引。
我现在这样写代码:

tv_show = ["bbc1_7.30","bbc1_8.00","itv1_8.40","bbc1_10.00"];
    indexesFromSearch = [];

tv_show.forEach(function(elem, index, array){
    a0 = tv_show[index].substring(0,5);
    if(a0=="bbc1_"){ 
        indexesFromSearch.push(index);
    };
    return indexesFromSearch;
});

alert(indexesFromSearch);

它工作得很好,但只是想知道是否有更好的方法来编码它。
谢谢。

w6lpcovy

w6lpcovy1#

您可以使用startsWith获取索引和过滤器。

const
    tv_show = ["bbc1_7.30", "bbc1_8.00", "itv1_8.40", "bbc1_10.00"],
    indices = [...tv_show.keys()].filter(i => tv_show[i].startsWith('bbc1_'));

console.log(indices);
jmo0nnb3

jmo0nnb32#

你可以这样使用includes

tv_show = ["bbc1_7.30", "bbc1_8.00", "itv1_8.40", "bbc1_10.00"];
indexesFromSearch = [];

tv_show.forEach((e, index) => {
  tv_show[index].includes("bbc1_") && indexesFromSearch.push(index);
  return indexesFromSearch;
});

alert(indexesFromSearch);
mtb9vblg

mtb9vblg3#

最简单的方法是减少数组,这本质上是过滤器和Map的结合。

const
  tv_show = ['bbc1_7.30', 'bbc1_8.00', 'itv1_8.40', 'bbc1_10.00'],
  indexesFromSearch = tv_show.reduce((acc, val, index) => {
    if (val.startsWith('bbc1_')) {
      acc.push(index);
    }
    return acc;
  }, []);

console.log(indexesFromSearch);

下面是一个简洁的版本,带有一个可重用的助手:

const pushIf = (arr, val, predicate, alt) => {
  if (predicate(val)) arr.push(alt ?? val);
  return arr;
};

const
  tv_show = ['bbc1_7.30', 'bbc1_8.00', 'itv1_8.40', 'bbc1_10.00'],
  indexesFromSearch = tv_show.reduce((acc, val, index) =>
    pushIf(acc, val, v => v.startsWith('bbc1_'), index), []);

console.log(indexesFromSearch);
bakd9h0s

bakd9h0s4#

您可以使用reducestartsWith

const tv_show = ["bbc1_7.30", "bbc1_8.00", "itv1_8.40", "bbc1_10.00"];

const indexes = tv_show.reduce((acc, curr, idx) => curr.startsWith("bbc1_") ? [...acc, idx] : acc, []);
console.log(indexes);

相关问题