我有一大堆从我的 rest api 中获得的对象,我想从其中一个元素中搜索一个值。 我设法想出了一种搜索单词的方法,但它适用于几个单词而不是全部。当我试图找出问题时,我意识到 for 循环不会遍历整个数组。 下面是我的代码
function search(nameKey, myArray) {
var lowercased_array = [];
//lowercase the search value
var lowercased_nameKey = nameKey.toLowerCase()
//lowercase the searched array
for (var i = 0; i < myArray.length; i++) {
myArray[i].name = myArray[i].name.toLowerCase()
lowercased_array.push(myArray[i])
}
var new_array = [];
for (var i = 0; i < lowercased_array.length; i++) {
if ((lowercased_array[i].name).includes(lowercased_nameKey)) {
new_array.push(lowercased_array[i])
}
}
return new_array
}
我首先将搜索词转为小写,我的第一个 for 循环是将数组对象中名称元素的值转为小写,以便进行搜索。 第二个 for 循环是检查数组中对象的 name 元素中是否存在搜索值,如果为真,则将整个对象推送到新数组中。 在返回带有搜索结果的新数组之前,我正在寻求有关如何确保该过程完成的帮助。
提前致谢
答案 0 :(得分:0)
通常,您可以简化代码。 如果你使用过滤器,你可以这样做。
function search(nameKey, myArray) {
var lowercased_nameKey = nameKey.toLowerCase()
var new_array = myArray.filter(item => item.name.toLowerCase().includes(lowercased_nameKey))
return new_array
}
答案 1 :(得分:0)
不清楚您为什么要创建 lowercased_array
,因为您已经在提供的数组中设置了小写值。话虽如此,您的函数可能会使用 filter
:
function search(nameKey, myArray) {
const lowercased_nameKey = nameKey.toLowerCase();
return myArray.filter(item => item.name.toLowerCase().includes(lowercased_nameKey));
}