我从 Firebase 查询返回结果。结果是一组具有不同属性的对象。这是我正在制作的汽车应用程序。每个对象看起来像这样
{
make: "make",
model: "model",
year: "year",
gas: "petrol",
mileage: "mileage",
images: {
image1: "url",
image2: "url"
}
}
我需要让用户能够改进这些结果,我正在努力想出一个可靠的解决方案
问题: 我需要用户能够优化 firebase 查询的结果。 用户会为他们的精细搜索选择不同的选项,所以我需要我的函数来处理这个问题
我要去哪里
//Heres' how I planned to pass the refinement options
refinements = {
make: 'value',
model: 'value',
year: 'value'
}
//currentResults is an array of objects with different properties
const refineResults = (currentResults, refinements) => {
newResults = [];
for (int i = 0; i < currentResults.count; i++ ){
let currentResult = currentResult[i];
for(int i = 0; i < refinements.count; i++){
}
}
}
我知道我对这个功能还不是很了解,但我什至不确定我是否以正确的方式处理这个问题。我不确定如何通过 for 循环访问属性值,作为改进。[I] 比较没有意义
我基本上想遍历我当前的结果,如果我的优化对象中的所有值都相等,那么我想将这个结果添加到我的新结果数组中。
感谢任何输入
最佳答案
像这样的东西就可以了:
refinements = {
make: 'Toyota',
model: 'RAV4',
year: '2010'
}
var currentResults = [
{ make: 'Toyota', model: 'Matrix', year: '2012' },
{ make: 'Toyota', model: 'RAV4', year: '2010' },
{ make: 'Chevrolet', model: 'Matiz', year: '2000' }
];
//currentResults is an array of objects with different properties
const refineResults = (currentResults, refinements) => {
return currentResults.filter((car) => {
/*var result = true;
Object.keys(refinements).forEach(refinement => {
if (car[refinement] !== refinements[refinement]) result = false;
});
return result;*/
return !Object.keys(refinements).some(refinement => car[refinement] !== refinements[refinement]);
});
}
console.log(refineResults(currentResults, refinements));
使用的关键概念:
- 代码使用
Array.filter
将当前结果过滤为仅匹配优化的结果。 - 代码使用
Object.keys
仅确定改进的键(make
、model
和year
),以便它可以使用Array.some
遍历它们(或注释掉的Array.forEach
)。
*
关于javascript - 优化数组的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49114051/