gpt4 book ai didi

javascript - 没有很多 for 循环的改进我的代码的更好方法

转载 作者:行者123 更新时间:2023-11-30 15:25:20 24 4
gpt4 key购买 nike

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

我的代码: 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]);
}
}

}
}

例子:如果一个输入字段有世界“你好”而另一个输入字段说“再见”

var array = [
{ "x":"Bye","y":"Bye","z":"Hello"},
{ "x":"Bye","y":"Bye","z":"Hi"},
{ "x":"Bye","y":"Hello","z":"Hi"},
];

我会将数组内的 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 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()));

.slice() 只是一个浅拷贝,因为我不想修改源数组,您可以根据需要省略它。

两个函数做同样的工作,选择一个你喜欢的:)

已编辑:

为了确保 indexOf 正在搜索值而不是键,可以更改为搜索

'"' + key + '",''"' + key + '"}'

关于javascript - 没有很多 for 循环的改进我的代码的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43082879/

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