我想编写一个函数,该函数将在数组中的对象字段中搜索特定的字符串,如果在对象的任何字段中找到该字符串,则将该对象添加到新数组中。 我已经开始使用我的函数,但是出现了新列表的问题,该列表包含对象的多个副本,其中包含要搜索的字符串的多个副本。 我知道这是因为我循环了它,以便它在每个字段中找到字符串,它将再次将对象添加到新数组中。 但是,我不确定编写该函数仅添加一次对象的方法,无论它的多少字段与要搜索的字符串相匹配,我都无法确定。 这是我的功能:

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次。

#1楼 票数:1

您可以使用Set ,这将防止重复。

function search (keyword, array){
    var result = new Set();
    for(let i = 0; i < array.length; i++) {
        for (key in array[i]) {
            if(array[i][key].includes(keyword)){
                result.add(array[i]);
            }
        }
    }
    return Array.from(result);
}

#2楼 票数:1 已采纳

Danny Buonocore代码的改进版本。

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

  ask by exc22 translate from so

未解决问题?本站智能推荐:

2回复

JavaScript返回对象数组[重复]

这个问题已经在这里有了答案: 更改和分配没有副作用的对象 7个答案 我似乎无法弄清楚如何从函数中返回对象数组。 知道我哪里出错了吗? 问题在于存储在temp中的结果如下:
1回复

JavaScript的动态对象数组

这是我到目前为止所拥有的。 基本上,每次我创建一个新的Item对象时,都需要它来创建特定数量的另一个名为Sensor的对象。 我尝试了其他几种方法,但似乎没有一种方法可以满足我需要的工作。 非常感谢您的帮助:)我对JS编辑有点陌生: 大家好! 谢谢您的帮助。 基本上,我的问
3回复

Javascript字符串到数组索引

我有一个从JSON文件导入的javascript数组,例如:(我们称之为jsonArray ) 在一个函数中,我希望能够传递如下字符串: 然后我可以拆分: 我希望能够使用该函数的参数值访问jsonArray 。 例如: 我该怎么做才能做到这一点? 或获得此结果
3回复

创建一个可以在对象数组中搜索元素的函数?

我有这个对象数组: 我必须创建一个函数,您可以在其中写下一个名称,该函数可以告诉您它是否是对象数组的一部分。 有人可以帮助我吗?
3回复

调用函数以更改对象在数组中的位置(JavaScript)

我试图弄清楚如何在调用函数时使用函数来更改对象的数组索引值,却无法弄清楚该如何做。 这是我到目前为止的内容: 后来我用这个叫买函数 该对象确实有更多功能,但是我删除了该部分以使其更易于阅读。 如果需要,我可以添加其他位,但是我认为这与之无关。 我知道我做错了rightTur
1回复

使用复选框过滤到新的对象数组-javascript

我有一个对象数组: 我想使用复选框按“作业”进行过滤,然后有一个新的单独对象数组被过滤(保留原始数组不变)。 我希望新数组可以在复选框更改时随时更新。 因此,如果选中“老师”,则只会得到一个新的第一个对象数组。 如果同时选中“律师”和“医生”,则用第二,第三和第四对象的新数组替
1回复

Javascript:使用引用函数的对象导出数组

我正在使用数组填充设置页面,并且某些按钮具有附加功能。 这就是我想要做的。 在一个文件中,导出具有引用同一文件中函数的对象的数组,或者导出一个类,然后从该类内部访问该数组,并引用该类中的函数。 // 导入文件 import Settings from './Settings';
5回复

创建一个处理Javascript中的对象数组的函数

所以我有一个对象数组,看起来像: 我正在尝试编写一个函数,使我可以打印类似 5 a的费用为$ 2.5 2 b的费用为$ 4 1 c花费$ 2 总计$ 8.50 到目前为止,我有类似 但这显然行不通。 我想我对如何使用我的函数正确访问那些