Javascript 改进代码的更好方法,无需许多for循环

Javascript 改进代码的更好方法,无需许多for循环,javascript,arrays,Javascript,Arrays,我正在尝试优化我的代码。我有一个JSON对象数组,我需要循环遍历这些对象,看看它们是否包含多个单词,并跟踪JSON对象是否包含所有世界,不仅仅是一个世界,而是所有世界。我不想向函数传递一个世界数组,因为我觉得我必须添加另一个for循环。现在,我的代码遍历每个输入字段,如果它不是空的,则调用函数并在输入字段中传递世界。如果我只检查一个单词,我的代码就可以正常工作,但我需要检查多个单词,并跟踪包含所有世界的对象 我的代码: WorkOrderArray这是一个全局数组 function search

我正在尝试优化我的代码。我有一个JSON对象数组,我需要循环遍历这些对象,看看它们是否包含多个单词,并跟踪JSON对象是否包含所有世界,不仅仅是一个世界,而是所有世界。我不想向函数传递一个世界数组,因为我觉得我必须添加另一个for循环。现在,我的代码遍历每个输入字段,如果它不是空的,则调用函数并在输入字段中传递世界。如果我只检查一个单词,我的代码就可以正常工作,但我需要检查多个单词,并跟踪包含所有世界的对象

我的代码: WorkOrderArray这是一个全局数组

function searchWO (workOrdersArray) {
            var filteredWO = [];

            for (var i=0; i < workOrdersArray.length; i++) {
                for (var prop in workOrdersArray[i]) {
                    if (myArray[i][prop] == nameKey) {
                            filteredWO.push(workOrdersArray[i]);
                    }
                }

            }
        }

我将把JSON对象存储在一个单独的数组中。因此,新数组将包含obj1和obj3,我不认为您的数组是有效的JavaScript数组,但是如果您的数组的形式如下

var array = [
    { "x":"Bye","y":"Bye","z":"Hello"},
    { "x":"Bye","y":"Bye","z":"Hi"},
    { "x":"Bye","y":"Hello","z":"Hi"},
];
那么您可以在ES6+中尝试此功能:

var数组=[
{“x”:“再见”,“y”:“再见”,“z”:“你好”},
{“x”:“拜拜”,“y”:“拜拜”,“z”:“嗨”},
{“x”:“再见”、“y”:“你好”、“z”:“你好”},
];
var keyName=[“你好”,“再见”];
函数searchWO(名称键,myArray){
for(nameKey的变量键){
myArray=myArray.filter(obj=>JSON.stringify(obj.indexOf(“““+key+”)!=-1);
}
返回myArray;
}
//恶搞者会讨厌的
函数searchWO2(名称键,myArray){
返回nameKey.reduce((ans,key)=>ans.filter(obj=>JSON.stringify(obj).indexOf(“'+key+”)!=-1),myArray);
}
log(searchWO(keyName,array.slice());

log(searchWO2(keyName,array.slice())能否请您的问题显示一个如何调用函数以及预期结果的示例?不清楚什么是
nameKey
myArray
,以及
workOrdersArray
。我已经从您的问题中删除了“json”标记,因为:您正在处理对象。除了你展示的数组不是有效的JS语法,所以请也修复它。根据你的描述,你的代码工作正常,没有bug,我认为这个问题可能更适合于。尝试标记此问题,要求主持人干预,并要求将问题移至此处。请注意,这只是我的意见。。。版主可能不同意(但询问也无妨)。@nnnnnn我已经编辑了postYour
数组
仍然是无效的JS语法。您是否打算使用
{}
而不是
[]
?你的函数现在变得更加没有意义了,因为现在主体试图使用你删除的参数,我认为你想要的行为将涉及函数接受多个单词作为输入。我的意思是让您显示一些可能的输入,如果您使用该输入调用函数,也会显示所需的输出,例如,您是否希望使用类似于
searchWO(['Hello','bye'])
,或
searchWO('Hello','bye')
,或…?@nnnnnn类似于此searchWO(['Hello','bye'])的东西来调用它。传递数组如果字符串化对象,那么如果对象的键为Hello而不是值为,则可能会得到误判Hello@shole. 对不起,我忘了把它设置为有效数组,我只是在写一个sudo数组。ES6+是否适用于任何浏览器?对不起,我是新来的coding@JoeLissner没有stringify,还有什么可以满足我的需要吗?@JoeLissner你说得对,稍微改变一下,找到“Hello”和“Hello”}?@Tamodedevelopers现代浏览器大多支持ES6+,你可以从这里看到详细信息:(IE11不算现代浏览器,oops)
var array = [
    { "x":"Bye","y":"Bye","z":"Hello"},
    { "x":"Bye","y":"Bye","z":"Hi"},
    { "x":"Bye","y":"Hello","z":"Hi"},
];