我想编写一个函数,该函数将在数组中的对象字段中搜索特定的字符串,如果在对象的任何字段中找到该字符串,则将该对象添加到新数组中。我已经开始使用我的函数,但是出现了新列表的问题,该列表包含对象的多个副本,其中包含要搜索的字符串的多个副本。我知道这是因为我循环了它,以便它在每个字段中找到字符串,它将再次将对象添加到新数组中。但是,我不确定编写该函数仅添加一次对象的方法,无论它的多少字段与要搜索的字符串相匹配,我都无法确定。这是我的功能:
function search (keyword, array){
var newArray = [];
for(let i = 0; i < array.length; i++) {
for (key in array[i]) {
if(array[i][key].includes(keyword)){
newArray.push(array[i]);
}
}
}
return newArray;
}
输出出现问题的一个例子是:
console.log(search('yes', myArray))
如果myArray包含在3个不同字段中显示“是”的对象,它将将该对象添加到newArray 3次。
答案 0 :(得分:1)
您可以使用Set,这样可以防止重复。
ID
答案 1 :(得分:1)
Danny Buonocore代码的改进版本。
set
可以防止重复。
function search (keyword, array){
var result = new Set();
array.forEach( object => {
for (const value of Object.values(object)) {
if ( value.includes(keyword) ) {
result.add(object);
continue; // Don't need to check more on this item.
}
}
});
return Array.from(result);
}
console.log(search("yes", [
{ key1 :"yes", key2:"yes" },
{ key1 :"no", key2:"no" }
]));