JS Object {}高级过滤

时间:2018-08-14 13:41:29

标签: javascript typescript vue.js vuejs2

我直接从数据库中获取了大量数据,这些数据存储在JS对象{}中,但是我无法使用内置JS的.filter函数。 在使用Vue.JS时,请避免使用箭头功能。

JS对象示例:

0:
brand: "Brand A"
compatibilitySetIds:Array(3)
createdAt:"2018-08-13T09:07:50.772Z"
deletedAt:null
id:"e7915261-677d-4527-90c6-09b5170afca8"
model:"Model-1"
series:null
type:"A"
updatedAt:"2018-08-13T09:07:50.772Z"
1:
brand: "Brand B"
compatibilitySetIds:Array(3)
createdAt:"2018-08-13T09:07:50.772Z"
deletedAt:null
id:"e7915261-677d-4527-90c6-09b5170afca8"
model:"Model-51"
series:"S02"
type:"B"
updatedAt:"2018-08-13T09:07:50.772Z"

我需要能够:

  1. 按型号过滤
  2. 最好也按品牌/系列/类型过滤
  3. 能够在所有字段中对asc / desc进行排序

我目前拥有的(作品)

  computed: {
    filteredEquipment: function() {
      if (this.search.selected === '' || !this.search.selected) {
        return this.equipmentItems;
      } else {
        const model = this.search.selected;
        console.log(model);
        const filtered = this.equipmentItems.filter(function(item) {
          return item.model === model;
        });
        return filtered;
      }
    },
  },

PS。 结合使用Vue-JS和TypeScript。

PPS。 我必须在客户端而不是服务器端进行过滤。

3 个答案:

答案 0 :(得分:0)

Object.keys(dbObject)这将转换为数组。然后,您应该只能使用所有其他filter等方法

答案 1 :(得分:0)

我假设您的数据项包装在数组中,因为您有对象键“ 0”和“ 1”,它们似乎是我的索引。您还可以在代码中使用过滤器自己。

您可以在这里使用.filter()进行选择。 因此,您可以选择最适合您的编码样式的

const data = [
  {
    brand: "Brand A",
    compatibilitySetIds: [],
    createdAt:"2018-08-13T09:07:50.772Z",
    deletedAt:null,
    id:"e7915261-677d-4527-90c6-09b5170afca8",
    model:"Model-1",
    series:null,
    type:"A",
    updatedAt:"2018-08-13T09:07:50.772Z"
  },
  {
    brand: "Brand B",
    compatibilitySetIds: [],
    createdAt:"2018-08-13T09:07:50.772Z",
    deletedAt:null,
    id:"e7915261-677d-4527-90c6-09b5170afca8",
    model:"Model-51",
    series:"S02",
    type:"B",
    updatedAt:"2018-08-13T09:07:50.772Z"
  }
];
//Specific one liner to filter all Model-1 models.
const AllModel_1Items = data.filter( item => item.model === 'Model-1' );
console.log( AllModel_1Items );
// Generic function with 3 parameters:
const filterProperty = ( source, property, value ) => source.filter( item => item[ property ] === value );
const allTypeA = filterProperty( data, 'type', 'A' );
console.log( allTypeA );
// Generic function usable with .filter()
const byProperty = ( property, value ) => item => item[ property ] === value;
const allBrandA = data.filter( byProperty( 'brand', 'Brand A' ));
console.log( allBrandA );

这些函数可以过滤任何属性。排序asc / desc只是.reverse()之后的数组.sort()

如果由于某些原因无法使用箭头或无法使用过滤器,则可以将相同的结构应用于简单的for循环以模仿.filter()

但是由于您在自己的代码中同时使用了.filter()和箭头,因此我假设您可以使用它们。

答案 2 :(得分:0)

您可以使用循环读取数组,并添加条件以过滤数据,例如:

let dataFiltered = [];
let data = [
{
  brand: "Brand A",
  compatibilitySetIds:Array(3),
  createdAt:"2018-08-13T09:07:50.772Z",
  deletedAt:null,
  id:"e7915261-677d-4527-90c6-09b5170afca8",
  model:"Model-1",
  series:null,
  type:"A",
  updatedAt:"2018-08-13T09:07:50.772Z",
},
{
  brand: "Brand B",
  compatibilitySetIds:Array(3),
  createdAt:"2018-08-13T09:07:50.772Z",
  deletedAt:null,
  id:"e7915261-677d-4527-90c6-09b5170afca8",
  model:"Model-51",
  series:"S02",
  type:"B",
  updatedAt:"2018-08-13T09:07:50.772Z",
}];

//Use a loop for read array
data.forEach(function(item){
  if(item.model === 'Model-1'){
    //Add conditions after push item to dataFilter
    dataFiltered.push(item);
  }
})

console.log(dataFiltered);//In dataFilter is data filtered