jQuery/Javascript 显示结果从到

jQuery/Javascript show result from to

这是使用此线程的 javascript/jQuery 重写的新问题,因为我无法在 MySQL 直接查询中执行此操作。

所以问题很简单:

我有从 MySQL 查询接收到 javascript 数组的数组:

var array = ["m2", "1", "2", "11", "12", "m4", "m3", "m5", "17", "m1"];

并且需要接受参数的函数来显示数组值。例如:

function showCategories(marker){

}

所以在上面的例子中,如果我调用 showCategories("m2"); 我需要得到这个:

1
2
11
12

如果我调用 showCategories("m5"); 我需要得到这个:

17

我目前正在尝试 substr 并在第一个示例中找到 begin "m2" 的索引并找到最后一个 m 索引(即 m4)并从数组中删除其他项目..有简单的方法吗?

var array = ["m2", "1", "2", "11", "12", "m4", "m3", "m5", "17", "m1"];

function showCategories(marker) {
  let currentCat = 'n';
  return array.reduce((obj, item) => {
    if (item.indexOf("m") === -1) {
      obj[currentCat].push(item);
    } else {
      currentCat = item;
      obj[currentCat] = [];
    }
    return obj;
  }, {})[marker] || [];
}

console.log(showCategories("m2"));
console.log(showCategories("m5"));

逻辑过程

如您所见,我正在使用 reduce 并检测项目中的值是否包含 m,这将指示新的 "category"。

然后,我将新类别之后的所有值填充到一个数组中,直到出现另一个类别,再次包含 m

希望对您有所帮助。

找到标记的索引,将它后面的所有内容切片,然后找到该数组中的第一个 "m" 索引并切片到它。剩下的就是中间的数字了。

var array = ["m2", "1", "2", "11", "12", "m4", "m3", "m5", "17", "m1"];

function showCategories(marker){
  let start = array.indexOf(marker);
  if (start === -1) return [];
  
  let slicedArray = array.slice(start + 1);
  let end = slicedArray.findIndex(val => val.startsWith("m"));
  return slicedArray.slice(0, end);
}

console.log(showCategories("m2"));
console.log(showCategories("m5"));

好吧,我认为您可以循环查找所需的索引并将结果存储到子数组中。

一种方法是循环直到找到 "m2",方法是:

function showCategories(find)
{
  let returnArray = [];
  let start = null;
  if (array.includes(find) //checks if the element exists
  {
    for(int i = 0; i < array.length; i++)
    {
      if (start == null && array[i] == "m2") //looks for element
      {
        start = i;
      }
      else if(isNaN(Number(array[i]))) //pushes element into array
      {
        returnArray.push(array[i]);
      }
      else if(start != null && !isNaN(Number(array[i]))) //breaks if element after find is not an int
      {
        break;
      }
    }
  }
  return returnArray;
}

我还没有对此进行测试,但按照这些思路行事是可行的。