Створити об'єкт з іншого за допомогою функції фільтра

I'm trying to create an array of objects using an array of objects. My first array is like that : 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;
    }
}
1
Ви можете розмістити свій повний дані об'єкт, будь ласка - навіть посилання на зовнішній ресурс (JSFiddle, Codepen) було б краще, ніж зображення.
додано Автор JBDouble05, джерело

5 Відповіді

Використовуйте .map замість .filter:

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

фільтр призначений для фільтруючих елементів, а повернене значення приймається як логічне значення для цього. Таким чином, у вашому випадку всі елементи будуть перевірені, оскільки новий об'єкт завжди є істинним значенням, і ви отримаєте рівний масив.

Відредагуйте своє питання оригінальним масивом у текстовому форматі, і я створить робочий приклад для вас.

1
додано

Функція filter() використовується для повернення масиву на основі деяких критеріїв пошуку, подібних до пропозиції WHERE. Ви хочете використовувати <�код > функція map() , використовуючи щось на зразок цього:

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

I think you want the map() function: https://www.w3schools.com/jsref/jsref_map.asp

Щось на зразок цього:

const newData = data.map( item => {
  return {
    item.listId,
    item.listName,
    'todo',
  }
})
1
додано

Наразі ви використовуєте масив. prototype.filter() , який видаляє невідповідні елементи з поточного масиву. Що ви хочете зробити , наскільки я можу сказати, це використання Array.prototype.map() , щоб створити новий масив на основі об'єкта ListModel . Ось як це зробити:

var lists = data.map(l => new ListModel(l.listId, l.listName, "todo"));
1
додано

Використовуйте карту замість фільтра.

Фільтр створює новий масив з усіма елементами, які проходять тест, що реалізується наданою функцією/виразом.

1
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram