gpt4 book ai didi

javascript - 在对象数组中搜索字符串并返回数组

转载 作者:行者123 更新时间:2023-12-01 00:37:23 26 4
gpt4 key购买 nike

我想编写一个函数,该函数将在数组中的对象字段中搜索特定字符串,如果在对象的任何字段中找到该字符串,则将此对象添加到新数组中。我已经让我的函数正常工作,但遇到了新列表的问题,其中包含对象的多个副本,其中包含正在搜索的字符串的多个副本。我知道这是因为我已经循环它,以便它在其中找到字符串的每个字段,它都会将该对象再次添加到新数组中。但是,我不确定有什么替代方法可以编写函数来仅添加对象一次,无论它有多少字段与正在搜索的字符串匹配。这是我的功能:

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 包含一个对象,其中“yes”出现在 3 个不同的字段中,则会将该对象添加到 newArray 3 次。

最佳答案

Danny Buonocore 代码的改进版本。

  • 没有意外的全局变量。
  • 用途forEach迭代数组。
  • 用途for...ofObject.values()迭代对象的值(使用for..in迭代对象本身的所有非Symbol、可枚举属性以及对象从其构造函数的原型(prototype)继承并导致许多错误的属性)
  • “短路”添加对象的测试:如果一个值匹配,则无需检查其他值。仅此一项可能就可以解决您的问题,但是如果您的数组中多次出现相同的对象,则使用 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" }
]));

关于javascript - 在对象数组中搜索字符串并返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58001230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com