首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的细化结果

数组的细化结果
EN

Stack Overflow用户
提问于 2018-03-05 15:37:28
回答 3查看 220关注 0票数 1

我正在返回一个firebase查询的结果。结果是一个具有不同属性的对象数组。这是我正在制作的一款汽车应用。每个对象看起来都是这样的

代码语言:javascript
复制
{
   make: "make",
   model: "model",
   year: "year",
   gas: "petrol",
   mileage: "mileage",
   images: {
       image1: "url",
       image2: "url"
   }
}

我需要让用户能够改进这些结果,并且我正在努力想出一个健壮的解决方案

问题:我需要用户能够改进防火墙查询的结果。用户将选择不同的选项进行精细搜索,因此我需要我的功能来处理这个问题。

,在那里我要去

代码语言:javascript
复制
//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循环访问属性值。

基本上,我想循环我当前的结果,如果我在细化对象中的所有值都相等,那么我想将这个结果添加到我的新结果数组中。

谢谢您的意见

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-05 15:56:25

像这样的东西会起作用的:

代码语言:javascript
复制
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));

使用的主要概念:

*

票数 2
EN

Stack Overflow用户

发布于 2018-03-05 15:55:14

我不太清楚您期望refinements对象如何工作,但我假设您需要每个结果中的每个属性在每个result中相等于它们的相应属性。在这种情况下,下面的refineResults函数将有所帮助。

代码语言:javascript
复制
// helper func, returns true only if all props on `refinements` match their counterparts on `result`
function matchesAll(refinements, result) {
  for (const key in refinements) {
    if (refinements[key] !== result[key]) {
      return false;
    }
  }
  return true;
}

// returns filtered list of results
function refineResults(currentResults, refinements) {
  return currentResults.filter(result => matchesAll(refinements, result));
}
票数 1
EN

Stack Overflow用户

发布于 2018-03-05 15:53:56

使用过滤器,就可以满足给定的要求,并且可以使用更多的过滤业务逻辑来传递函数,例如大于、小于和更多的参数。试试看。

下面是实现相同目标的简单代码。

代码语言:javascript
复制
var results = [
  {name:"john",age:15,price:400},
  {name:"joe",age:25,price:450},
  {name:"johnson",age:35,price:500}
];
var refine = {name:"john",age:15};

var result = results.filter(function(val){
	return val.name === refine.name && val.age == refine.age;
});

console.log(result);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49114051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档