求数组中最大的公共前缀

function computedCommonStrByArr(arr) {
  if (!arr.length) {
    return '数组长度为0,没有公共的前缀';
  } else if (arr.length === 1) {
    return `公共的前缀为:${arr[0]}`;
  } else {
    // 获取最短的字符串
    const getMinLengthIndex = (arr) => {
      let minLengthIdx = 0;
      let minLength = arr[0];
      arr.forEach((item, index) => {
        if (item.length < minLength) {
          minLengthIdx = index;
          minLength = item.length;
        }
      });
      return minLengthIdx;
    };
    const minLengthIdx = getMinLengthIndex(arr);
    let minLengthStr = arr[minLengthIdx];
    let endSign = false;
    // 匹配最短字符串是否是最长公共前缀的条件:filter出来的数组长度和原数组长度一致
    while (minLengthStr.length && !endSign) {
      const newArr = arr.filter((item) => item.indexOf(minLengthStr) !== -1);
      endSign = newArr.length === arr.length;
      if (!endSign) {
        minLengthStr = minLengthStr.slice(0, minLengthStr.length - 1);
      }
    }
    if (minLengthStr.length < 1) {
      return '没有公共的前缀';
    } else {
      return `公共的前缀为:${minLengthStr}`;
    }
  }
}

自测

let arr = [];
arr = ['aaafsd', 'aawwewer', 'aaddfff'];
arr = ['abafsddd', 'abwwewer', 'abddffff'];
arr = ['a', 'abwwewer', 'abddffff'];
arr = ['', 'abwwewer', 'abddffff'];
console.log(computedCommonStrByArr(arr));

icezero
28 声望3 粉丝