Создать объект из другого, используя функцию фильтра - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь создать массив объектов, используя массив объектов.Мой первый массив выглядит так: enter image description here

И я хочу создать список объектов только с идентификатором, именем и задачей.Это то, что я делаю на самом деле, но это не работает:

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 голосов
/ 28 декабря 2018

В настоящее время вы используете Array.prototype.filter(), который удаляет несовпадающие элементы из текущего массива.Насколько я могу сказать, вы хотите сделать, это использовать Array.prototype.map() для создания нового массива на основе объекта ListModel.Вот как вы это сделаете:

var lists = data.map(l => new ListModel(l.listId, l.listName, "todo"));
0 голосов
/ 28 декабря 2018

Использовать карту вместо фильтра.

Фильтр создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией / выражением.

0 голосов
/ 28 декабря 2018

Функция filter() в большей степени используется для возврата массива на основе некоторых критериев поиска, аналогично предложению WHERE.Вы хотите использовать функцию map(), используя что-то вроде этого:

var lists = data.map(l => {
    return new ListModel(l.listId, l.listName, 'todo');
});
0 голосов
/ 28 декабря 2018

Я думаю, вам нужна функция map(): https://www.w3schools.com/jsref/jsref_map.asp

Примерно так:

const newData = data.map( item => {
  return {
    item.listId,
    item.listName,
    'todo',
  }
})
0 голосов
/ 28 декабря 2018

Используйте .map вместо .filter:

var lists = data.map(l => {
            return new ListModel(l.listId, l.listName, 'todo');
});

. Фильтр предназначен для фильтрации элементов, и для этого в качестве логического значения принимается возвращаемое значение.Так что в вашем случае все элементы будут проверены, потому что новый объект всегда является истинным значением, и вы получите равный массив.

Отредактируйте ваш вопрос с помощью исходного массива в текстовом формате, и я создамрабочий пример для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...