过滤的对象数组,nuxt,vue js

Posted

技术标签:

【中文标题】过滤的对象数组,nuxt,vue js【英文标题】:filtered array of objects, nuxt, vue js 【发布时间】:2020-01-02 10:49:42 【问题描述】:

我需要根据对象中某个键的值来过滤一个数组,但是我得到一个错误:

Property 'sort' does not exist on type 'Object'

我预计如果panel.sorttrue,则将呈现数组worktop。否则,将呈现数组groupA

我做错了什么?为什么我的sort 键不可见?

export default class PanelSettings extends Vue 
  panels: Array < Object > = [
      id: 0,
      name: "one",
      sort: true
    ,
    
      id: 1,
      name: "two",
      sort: true
    ,
    
      id: 2,
      name: "three",
      sort: true
    ,
    
      id: 3,
      name: "four",
      sort: true
    ,
    
      id: 4,
      name: "five",
      sort: true
    ,
    
      id: 5,
      name: "six",
      sort: true
    ,
    
      id: 6,
      name: "seven",
      sort: false
    ,
    
      id: 7,
      name: "eight",
      sort: false
    ,
    
      id: 8,
      name: "nine",
      sort: false
    ,
    
      id: 9,
      name: "ten",
      sort: false
    ,
    
      id: 10,
      name: "eleven",
      sort: false
    
  ];

  get worktop() 
    return this.panels.filter(function(panel) 
      return panel.sort == true;
    );
  ;
  get groupA() 
    return this.panels.filter(function(panel) 
      return panel.sort == false;
    );
  ;


<ul>
  <li v-for="panel in worktop" :key="panel.id" class="mb-3 mr-8">
    <div>
      <tw-pannel class="text-danger button">
        <tw-icon name="minus" />
        <span>panel.name</span>
      </tw-pannel>
    </div>
  </li>
</ul>
<ul>
  <li v-for="panel in groupA" :key="panel.id" class="mb-3 mr-8">
    <div>
      <tw-pannel class="text-primary">
        <tw-icon name="plus" />
        <span>panel.name</span>
      </tw-pannel>
    </div>
  </li>
</ul>

【问题讨论】:

【参考方案1】:

根据docs,您不应使用Object 类型,而应使用object。但即便如此,sort 也不是object 的属性,因为javascript 的Object 没有sort 的属性。

创建接口或类型别名(参见differences)并使用它代替Object

interface MyPanelObject 
    id: number,
    name: string,
    sort: boolean


/*OR:*/

type MyPanelObject = 
    id: number,
    name: string,
    sort: boolean


/* change this line: */
panels: Array<MyPanelObject> = [/*panels*/];

【讨论】:

感谢您的回答!但我得到一个错误:1)属性或方法“panelPlace”未在实例上定义,但在渲染期间被引用。,,2)`TypeError:_vm.panelPlace不是函数` 什么是panelPlace?这是添加到每个 panel 对象的某些方法吗?我在你的代码中看不到它。 哦,对不起!!!!是的,我没有删除这个方法。但是,尽管如此,界面还是不起作用。【参考方案2】:

虽然您可以为panels 声明正确的类型注释,但在您的特定用例中实际上并不需要它(至少从问题中显示的内容来看)。

您可以简单地删除类型注释,并允许 TypeScript 推断数组类型而不会失去类型安全性:

【讨论】:

以上是关于过滤的对象数组,nuxt,vue js的主要内容,如果未能解决你的问题,请参考以下文章

Vue JS按多个数组对象项过滤

Vue JS如何根据数组值删除对象

如何在Vue中对对象数组进行排序和过滤

Vue:过滤对象数组以进行搜索

过滤数组并匹配至少一个条件

js过滤数组中都为空的对象几种方式