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;
}
我还没有对此进行测试,但按照这些思路行事是可行的。
这是使用此线程的 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;
}
我还没有对此进行测试,但按照这些思路行事是可行的。