打字稿过滤方法

时间:2017-01-05 14:21:43

标签: javascript typescript

在我的angular 2应用程序中,我声明了2个对象数组。

var express = require('express');
var router = express.Router();

router.get('/app', function(req, res){
  res.render('app/home');
});
module.exports = router;

现在我使用var data = [{ "id": 1, "name": "Sally", "country": { "id": 1, "name": "Chile" }, "city": { "id": 1, "name": "Santiago" }, "city-spot": { "id": 1, "name": "Downtown", }, }, { "id": 2, "name": "Tom", "country": { "id": 3, "name": "Canada" }, "city": { "id": 2, "name": "Vancouver" }, "city-spot": { "id": 5, "name": "Downtown", } } ]; //iterate to generate var modData = data.map(function(d){ return { "id": d.id, "name": d.name, "country": d.country.name, "city": d.city.name, "city-spot": d["city-spot"].name } }); console.log(modData); 方法返回一个数组,其中包含checked属性为true的对象。

users: User[];
selectedUsers: User[];

问题是两个数组的元素的引用是相同的。 那么有没有办法可以过滤掉对象并返回新对象的数组(新引用)?

3 个答案:

答案 0 :(得分:8)

您始终可以使用Array.prototype.map创建新数组,并使用Object.assign创建新对象:

this.users.filter(user => user.isChecked).map(u => Object.assign({},u));

答案 1 :(得分:5)

您可以使用_.cloneDeep函数(" lodash"库):

在你需要的打字稿中实现lodash:

npm i -S lodash

和@types lib:

npm i -S @types/lodash

并在您的代码中:

import * as _ from 'lodash'

let cloneCheckedObject = _.cloneDeep(this.users.filter(user => user.isChecked);

答案 2 :(得分:2)

让我们采取@Amir的答案,并使其更加友好地打字:

this.users.filter(user => user.isChecked).map(u => {...u});