我正在尝试优化我的代码。我有一个JSON对象数组,我需要循环遍历这些对象并查看它们是否包含多个单词并跟踪JSON对象(如果包含所有世界,而不仅仅是一个,而是所有这些对象)。我不想传递给一个世界数组的函数,因为我觉得我必须为循环添加另一个。现在,我的代码遍历每个输入字段,如果它不是空的,则调用函数并传递世界输入字段。如果我只检查一个单词,我的代码工作正常,但我需要检查多个并跟踪包含所有世界的对象
我的代码: workOrdersArray它是一个全局数组。
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]);
}
}
}
}
实施例: 如果一个输入字段的世界为“Hello”而另一个输入字段为“Bye”
var array = [
{ "x":"Bye","y":"Bye","z":"Hello"},
{ "x":"Bye","y":"Bye","z":"Hi"},
{ "x":"Bye","y":"Hello","z":"Hi"},
];
我将JSON对象存储在一个单独的数组中。所以新数组将具有obj1和obj3
答案 0 :(得分:2)
我不认为你的数组是一个有效的JavaScript数组,但如果你的数组的形式是
var array = [
{ "x":"Bye","y":"Bye","z":"Hello"},
{ "x":"Bye","y":"Bye","z":"Hi"},
{ "x":"Bye","y":"Hello","z":"Hi"},
];
然后你可以在ES6 +中试试这个:
var array = [
{ "x":"Bye","y":"Bye","z":"Hello"},
{ "x":"Bye","y":"Bye","z":"Hi"},
{ "x":"Bye","y":"Hello","z":"Hi"},
];
var keyName = ["Hello", "Bye"];
function searchWO (nameKey, myArray) {
for(var key of nameKey){
myArray = myArray.filter(obj => JSON.stringify(obj).indexOf('"' + key + '"') != -1);
}
return myArray;
}
// Loop Haters Gonna Hate
function searchWO2 (nameKey, myArray) {
return nameKey.reduce((ans, key) => ans.filter(obj => JSON.stringify(obj).indexOf('"' + key + '"') != -1) , myArray);
}
console.log(searchWO(keyName, array.slice()));
console.log(searchWO2(keyName, array.slice()));
&#13;
.slice()
只是一个浅层副本,因为我不想修改源数组,如果需要,可以省略它。
两个功能都做同样的工作,选择你喜欢的一个:)
<强>编辑:强>
要确保indexOf
正在搜索值而不是键,可以更改为搜索
'"' + key + '",'
和'"' + key + '"}'