javascript - 从现有属性创建新数组

标签 javascript arrays angularjs object ionic-framework

我有一个这样的对象:

export var PROJECT: any = {
    id: "1",
    name: "Hunkemoller",
    teammembers: [
        {
            id: 1,
            name: "Sarah Johnson",
            firstname: "Sarah",
            role: "Manager"
        },
        {
            id: 2,
            name: "Christian Johnson",
            firstname: "Christian",
            role: "Employee"
        }

等等

我正在制作一个应用程序,我想在其中添加一个搜索元素,以便您可以搜索不同的团队成员。我想初始化每个团队成员的所有属性“名称”。这是唯一需要过滤的东西。

我想到了两种方法:

  1. 创建一个仅包含项目名称 > 团队成员的新数组 在里面。
  2. 只需初始化名称即可。但我还没有成功。

您能帮助我做出正确的选择并向我解释如何才能成功吗? 我什至现在不知道如何从现有数组中创建一个新数组。我在想这样的事情:

var teamMembers = project.teammembers.name();

但是除了这个选项之外,如果我可以只使用对象中的 name 属性,那将是最好的。

我到目前为止(我正在使用 Ionic 2/Angular 2)

<ion-searchbar (ionInput)="getTeammembers($event)" [(ngModel)]="searchQuery"></ion-searchbar>
<ion-list>
   <ion-item *ngFor="let teammember of project.teammembers">
       {{ teammember.name }}
   </ion-item>
</ion-list>

在我的 typescript 文件中,我有以下内容:

  initializeTeammembers() {
    this.project.teammembers;
  }

  getTeammembers(ev) {
    // reset teammembers back to all of the teammembers
    this.initializeTeammembers();

    // set val to the value of the searcbar
    let val = ev.target.value;

    // if the value is empty string, don't filter teammembers
    if (val && val.trim() != '') {
      this.project.teammembers.name = this.project.teammembers.name.filter((teammember) => {
        return (teammember.toLowerCase().indexOf(val.toLowerCase()) > -1);
      })
    }
  }

但是这不起作用。我收到错误:无法读取未定义的属性“过滤器”。

有谁可以帮助我吗?提前致谢。

最佳答案

您可以使用 Array.prototype.map 创建一个新的不同数组:

var teamMembers = project.teammembers.map(function(item){ return item.name });

var project = {
    id: "1",
    name: "Hunkemoller",
    teammembers: [
        {
            id: 1,
            name: "Sarah Johnson",
            firstname: "Sarah",
            role: "Manager"
        },
        {
            id: 2,
            name: "Christian Johnson",
            firstname: "Christian",
            role: "Employee"
        }
      ]
   };

console.log(project.teammembers.map(function(item){ return item.name }));

更好的方法是创建 pipe这将使用 Array.prototype.filter 过滤您的结果.

关于javascript - 从现有属性创建新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38222228/

相关文章:

javascript - 为什么这些数据表函数是 'undefined' ?

javascript - Ember.js 如何使用 View 观察选择变化 Ember.Select multiple=true?

angularjs - Angular Js,检查 Angular js中逗号分隔字符串中的子字符串

javascript - 使用 AngularJS 实现 Google Adwords 动态再营销标签的最佳实践是什么

javascript - 将 const 函数代码从 JSX 转换为 TSX

javascript - 为什么这些空的脚本标签会阻止我的页面工作?

c - 声明具有动态内容的数组

c - 在 ANSI C 中使用数组和指针

java - 从Java中传递的字符串中获取最长的子字符串

javascript - Angularjs $http获取json数据,但不会显示