我正在尝试使用对象数组创建对象数组。 我的第一个数组是这样的:
我想创建一个仅包含ID,名称和任务的对象列表。 这是我实际上所做的,但不起作用:
var lists = data.filter(l => {
return new ListModel(l.listId, l.listName, 'todo');
});
ListModel对象是:
class ListModel {
constructor(id, name, tasks) {
this.id = id;
this.name = name;
this.tasks = tasks;
}
setId(id) {
this.id = id;
}
setName(name) {
this.name = name;
}
setTask(task) {
this.task = task;
}
}
答案 0 :(得分:1)
使用.map代替.filter:
@app.route('/login', methods=['POST', 'GET'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user:
if check_password_hash(user.password, form.password):
login_user(user, remember=form.remember.data)
return redirect(url_for('dashboard'))
return render_template('err_login.html')
return render_template('login.html', form=form)
filter用于过滤元素,并且将返回值用作布尔值。因此,在您的情况下,所有元素都将得到验证,因为新对象始终是真实值,并且您将获得一个相等的数组。
使用文本格式的原始数组编辑您的问题,我将为您创建一个有效的示例。
答案 1 :(得分:1)
filter()
函数通常用于根据某些搜索条件返回数组,类似于WHERE子句。您想要利用的是map()
函数,其用法如下:
var lists = data.map(l => {
return new ListModel(l.listId, l.listName, 'todo');
});
答案 2 :(得分:1)
我认为您需要map()
函数:https://www.w3schools.com/jsref/jsref_map.asp
类似这样的东西:
const newData = data.map( item => {
return {
item.listId,
item.listName,
'todo',
}
})
答案 3 :(得分:1)
使用地图代替过滤器。
Filter创建一个新数组,其中所有元素都通过了由提供的函数/表达式实现的测试。
答案 4 :(得分:1)
您当前正在使用Array.prototype.filter()
,它会从当前数组中删除不匹配的元素。据我所知,您想要要做的是使用Array.prototype.map()
基于ListModel
对象创建一个新数组。这是您的操作方式:
var lists = data.map(l => new ListModel(l.listId, l.listName, "todo"));