使用过滤器功能从另一个对象创建对象

时间:2018-12-27 21:35:57

标签: javascript arrays object

我正在尝试使用对象数组创建对象数组。 我的第一个数组是这样的:enter image description here

我想创建一个仅包含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;
    }
}

5 个答案:

答案 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"));