如何使用 jQuery 在 JavaScript 数组中搜索字符串? [复制]
Posted
技术标签:
【中文标题】如何使用 jQuery 在 JavaScript 数组中搜索字符串? [复制]【英文标题】:How do I search a string in JavaScript array using jQuery? [duplicate] 【发布时间】:2017-05-09 21:10:57 【问题描述】:我有一个 javascript 数组:
var j_array = new Array();
j_arry=["class:1","division:a","class:5","class:3","division:b","division:c","division:d","class:10"];
我需要找出这个类来了多少次和它的数组键,所以我使用:
found = $.inArray('class', j_array); ` But it returns `-1`;
然后我使用:
var search = 'class';
$.each([j_array], function(index, value)
$.each(value, function(key, cell)
if (search.indexOf(cell) !== -1)
console.log('found in array '+index, cell);
);
);
但这也是错误的。我该如何解决?
我想从这个数组中得到以下信息:
类来了 4 次,在键 0、2、3 和 7
我只想制作一个单独的类数组,即
new_array = ["class:1", "class:2", "class:3", "class:10"];
目前j_array
中有四个类。我怎样才能得到Nth class value
即1st class value ="class:1"
、2nd class value="class:5"
等
【问题讨论】:
这里不需要jQuery,使用原生数组方法 为什么需要嵌套循环? 1 。不要使用嵌套循环 2. 做反向例如item.indexOf(searchTerm);
这个问题肯定太宽泛了——有很多可能的方法。
【参考方案1】:
如果您使用 jQuery 来支持一些仍然没有实现新的 Array 函数的非常旧的浏览器,并且您不想因为已经在使用 jQuery 而对它们进行 polyfill,那么您可以使用 jQuery 等价物:
var arr = ["class:1", "division:a", "class:5", "class:3", "division:b", "division:c", "division:d", "class:10"]
var result = $.grep(arr, function (x) return x.indexOf('class') !== -1 )
var indices = $.map(result, function (x) return arr.indexOf(x) )
这与this answer 的代码相同,但使用的是 jQuery。
【讨论】:
【参考方案2】:您可以使用filter
和map
函数过滤您的数组,使其仅包含与文本'class'
匹配的元素,并使用数组索引表示法访问数组中的第n 个元素。查看下面的代码sn-p,希望对你有帮助。
以下代码 sn-p 使用 ES6 箭头语法。
var arr = ["class:1", "division:a", "class:5", "class:3", "division:b", "division:c", "division:d", "class:10"];
var result = arr.filter(x => x.indexOf('class') !== -1);
var indices = result.map(x => arr.indexOf(x));
console.log(indices);
console.log(result);
var nValue = window.prompt('Enter n value');
console.log(result[nValue]);
【讨论】:
【参考方案3】:这里单reduce就足够了。
var arr = ["class:1","division:a","class:5","class:3","division:b","division:c","division:d","class:10"],
res = arr.reduce((p,c) => c.includes("class") ? (p.count++, p.keys.push(c.split(":")[1]), p)
: p ,count:0, keys:[]);
console.log(res);
【讨论】:
【参考方案4】:你必须先做map
然后filter
。
var j_array = ["class:1", "division:a", "class:5", "class:3", "division:b", "division:c", "division:d", "class:10"];
var result = j_array.map(function(e, i)
return e.indexOf('class') > -1 ? '' + i : false;
).filter(function(e)
return !!e;
);
console.log(result);
【讨论】:
【参考方案5】:这是您问题 1 + 2 的答案。它也是“n”证明,因此也回答您的第 3 部分。这是通过老式的硬移植而不是时髦的功能来实现的。原始数组条目被拆分和过滤,然后如果符合条件,我们使用指针数组(列表)将其存储在关联数组(结果)中,以便更轻松地给出排序结果并从关联数组中提取值。 max 变量可能不是必需的,但为了清楚起见包括在内 - 可以使用 list.length 代替。请注意,list[] 数组将是稀疏的(缺少步骤),因此我们在输出步骤中使用之前测试每个条目。
var j_array = new Array();
j_arry=["class:1","division:a","class:5","class:3","division:b","division:c","division:d","class:10","class:1"];
var a, result = [], list=[], max = -1
for (var i =0; i < j_arry.length; i = i + 1)
var a = j_arry[i].split(":")
if ( a[0] === "class")
var key = "c" + a[1]
if ( !result[key] ) result[key] = pos:[]
result[key].cnt = result[key].cnt ? result[key].cnt + 1 : 1;
result[key].pos.push(i)
list[parseInt(a[1])] = "c" + a[1]
max = parseInt(a[1]) > max ? a[1] : max;
// say locations
for (var i = 0; i < max; i = i + 1)
if (list[i])
key = "c" + i
console.log("Class " + i + " occurs at " + result[key].pos.toString() )
// make new array
var newArray=[]
for (var i = 0; i < max; i = i + 1)
if (list[i])
newArray.push("Class:" + i)
console.log("New array=" + newArray.toString() )
结果是:
第 1 类发生在 0,8 第 3 类发生在 3 第 5 类发生在 2 新数组=Class:1,Class:3,Class:5
【讨论】:
【参考方案6】:使用Array.prototype.filter
过滤掉数组中包含字符串class的元素 - 参见下面的演示:
var j_array =["class:1","division:a","class:5","class:3","division:b","division:c","division:d","class:10"];
var result = j_array.filter(function(e)
return e.indexOf('class')!==-1;
);
console.log(result);
编辑:
要获取索引列表,你可以试试这个:
var j_array =["class:1","division:a","class:5","class:3","division:b","division:c","division:d","class:10"];
var filteredIndices = []
var filtered = j_array.filter(function(e,i)
if(e.indexOf('class')!==-1)
filteredIndices.push(i);
return true;
else
return false;
);
console.log(filtered);
console.log(filteredIndices);
// Nth class value
console.log(filtered[2]); // this prints the 3rd one
.as-console-wrappertop:0;max-height:100%!important;
【讨论】:
谢谢朋友。但我有 3 个问题。您能否回答这个单独的 3 个问题。 问题 (1) 和 (2) 可以从上面演示中的result
中清楚地看出...对于 (3) 你可以做 result[N]
...
没有朋友。实际上你给出了问题 2 的答案,并且 result[N] 是基于 new array 。但我想要基于 J_array 的结果 [N]。我找不到第一个问题的答案。
对于(1),你需要一个像[0,2,3,7]这样的数组吗?
是的。请在您的答案中更新此内容。【参考方案7】:
您可以过滤在新数组中匹配的元素,然后只返回这个新数组的长度
var j_arry = ["class:1","division:a","class:5","class:3","division:b","division:c","division:d","class:10"];
var res = j_arry.filter(x => x.includes("class"));
var key = res.map(x => x.split(":")[1]);
console.log("Class coming " + res.length + " , at key " + key.join(","));
console.log("new array = ", res);
【讨论】:
以上是关于如何使用 jQuery 在 JavaScript 数组中搜索字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Javascript/JQuery 在移动浏览器中限制点运算符('.')
如何在javascript或jquery中使用变量作为数组键[重复]
如何使用 javascript/jquery 在时间字符串中添加一秒
如何使用 javascript/jquery 设置用户输入的样式