在我的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[];
问题是两个数组的元素的引用是相同的。 那么有没有办法可以过滤掉对象并返回新对象的数组(新引用)?
答案 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});