2017-10-18 52 views
0

我想从我的数组中删除对象的多个项目中删除某些属性的任何内置的功能,可以帮助我解决我的问题:滤波器阵列,并从剩余的对象

数组是:

this.array= [ 
    { "Id": 1, "Title": "3 man crew –Distribution", "checked": true,'data': 123}, 
    { "Id": 2, "Title": "3 man crew – Transmission" ,'data': 123}, 
    { "Id": 3, "Title": "Flagger",'data': 124 }, 
    { "Id": 1, "Title": "Mowing Crew" ,'data': 183} 
    { "Id": 7, "Title": "Mowing Crew3" ,'data': 187} 
] 

我想从我的filtere数组中删除标识数据如果输入为1,所以我的新数组是:

[ 
    { "Title": "3 man crew –Distribution", "checked": true}, 
    { "Title": "Mowing Crew" ,'data': 183} 
] 

app.html:

根据id删除阵列:

**app.ts** 

deleteCheck(value) { 
    //logic to delete id and data 
    this.array = this.array.filter(item => item.Id=== value); 
    // returns array but with Id and but i want my new array without data and id 
} 
+2

为什么你会认为这与Angular有什么关系? – 2017-10-18 19:04:35

+0

您是否试图从现有对象中删除属性或创建没有属性的新对象? – guest271314

+0

我建议你回头查看JavaScript教程并再次介绍。你试图做的事情是非常微不足道的。它只是过滤和映射,这就是JavaScript为了生活所做的事情。如果每次想要进行一些数据操作时都必须发布到SO,则不会变得非常快。 – 2017-10-18 19:15:02

回答

0

使用map功能:

var newArray = array 
    .filter(item => item.Id === value) 
    .map(item => ({ 
     Title: item.Title, 
     checked: item.checked 
    })); 
+0

哟右滤清器是必须 –

+0

@torazaburo过滤不是OP的质疑,因为他知道如何使用'过滤器(。 ..)'功能。 – Andrei

+0

则返回undefined如果不匹配 –

1

除了filter(),你也应该使用map(),像这样的:

deleteCheck(value) { 

//logic to delete id and data 
    this.array = this.array.filter(item => item.Id === value) 
      .map(item => { 
       delete item.Id; 
       delete item.Title; 
       return item; 
      }); 
} 
+0

我不使用'map'作为一种变异通过的副作用,如'delete'对象的一个​​巨大的风扇。 – 2017-10-18 19:17:18

1

可能映射:

.map(({Id, data, ...rest}) => rest); 

请注意,这是一个相当新酷的东西(对象与其他运营商解构),但它works,在现代浏览器至少...