gpt4 book ai didi

JavaScript - 执行递归搜索,值不被保留

转载 作者:行者123 更新时间:2023-12-03 08:17:20 24 4
gpt4 key购买 nike

我正在尝试对一系列车辆进行搜索,看看是否有与“BMW”的“品牌”匹配的车辆。

问题:虽然找到匹配项并且结果被赋予值 true,但随着函数继续循环,该值会丢失。我以为只要找到真正的值,我就能突破这个函数。中断不起作用。

如果我无法突破该函数并且必须继续循环遍历该父节点属性的其余部分,我如何保留真实值,因为一旦找到 true,我基本上就完成了这个节点(车辆)。

谢谢

这是我的节点树的 chop View :

[
{
"title": "2008 BMW 650",
"price": "30,995.00",
"type": "Coupes",
"details" : [{.....}],
"features" : [
{ ..... },
{ "name": "Make", "value": "BMW" },
{ ..... }
]
},
{ ..... }
]
<小时/>
let isPresent  = recursiveFilterSearch(node, "Make", "BMW")


function recursiveFilterSearch(node, filterObj, filterValue) {
let result;

for (var key in node) {

// if the any node name & value matches, return true (on this vehicle)

if (node.name !== undefined) {
if (node.name === filterObj && node.value === filterValue) {
result = true;
break; // <-- not doing what I thought it would do
}
}

// if this node property is an array recursively loop thru the array's properties

if (result !== true && Object.prototype.hasOwnProperty.call(node, key)) {
var isArray = Object.prototype.toString.call(node[key]) === '[object Array]';
if (isArray) {
var childrenNode = node[key];
childrenNode.map(function (childNode) {
recursiveFilterSearch(childNode, filterObj, filterValue);
});
}
}
}
return result;
}

最佳答案

在这个问题上苦苦挣扎,没有得到那些比我聪明得多的人的帮助。

我希望这对其他人有帮助。

我故意没有按功能进行搜索(如上面 plalx 建议的那样),因为我想在可能没有功能部分的产品上重复使用此代码。人们可以将其用于任何产品,即。从汽车到鞋子再到电视。属性名称并不重要。

请注意,我故意将各个变量小写,只是为了安全起见,并且在值上使用indexOf,因为我的客户端具有“自动”和“6速自动”等值,因此索引将选择当搜索“自动”时,两者都会上升。

collection-filter.js(javascript 文件)

function recursiveFilterSearch(node, filterObj, filterValue) {
let result = false;
for (const prop in node) {
if (node !== undefined) {
if (node.value !== undefined) {
node.name = (node.name).toLowerCase();
node.value = (node.value).toLowerCase();
if (node.name === filterObj && (node.value).indexOf(filterValue) > -1) {
result = true;
}
}
if (typeof(node[prop]) === 'object') {
recursiveFilterSearch(node[prop], filterObj, filterValue);
}
if (result) {
break;
}
}
}
return result;
}

module.exports = {
filterCollection(coll2Filter, filterName, filterValue) {
const results = [];
coll2Filter.map((node) => {
const isMatch = (recursiveFilterSearch(node, filterName.toLowerCase(), filterValue.toLowerCase()));
if (isMatch) {
results.push(node);
}
});
return results;
}
};
}

Inventory.js:(使用 alt Flux 的 React.js 文件)

import CollectionFilter from '../../components/forms/helpers/collection-filter.js';

render() {
if (!this.props.items) return <div>Loading ...</div>;
const products = this.props.items;
const result = CollectionFilter.filterCollection(products, 'Trans', 'Automatic');
return (
<div>{ result }</div>
)
.....

关于JavaScript - 执行递归搜索,值不被保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881871/

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