Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   перебор массива объектов (https://javascript.ru/forum/misc/69904-perebor-massiva-obektov.html)

phoenix200689 26.07.2017 11:53

перебор массива объектов
 
Всем привет! Подскажите, пожалуйста где делаю не правильно:
Есть массив объектов, у каждого объекта есть свойство status.
Хотелось бы передать в функцию параметр "Выполнено" и получить количество всех объектов, в которых status: "Выполнено".
Пробую так:
function getStatus(array, search) {
    var values = [];
    
    array.forEach(function(values, item) {
      if (item.key === search) {
        values.push(item.key);
      }
    });

    return values;
};


var projects = [{
      comments: "какой-то комментарий из первого объекта",
      prioritet: "4",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из второго объекта",
      prioritet: "1",
      status: "В работе"
    }, {
      comments: "какой-то комментарий из третьего объекта",
      prioritet: "2",
      status: "Просрочено более 7 дней"
    }, {
      comments: "какой-то комментарий из четвертого объекта",
      prioritet: "3",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из пятого объекта",
      prioritet: "5",
      status: "Просрочено до 7 дней"
    }];
    
    console.log(getStatus(projects, "Выполнено"));

рони 26.07.2017 12:43

phoenix200689,
function getStatus(array, search) {
    return array.filter(function(item) {
        return Object.keys(item).some(function(key) {
            return item[key] === search
        })
    })
};


var projects = [{
      comments: "какой-то комментарий из первого объекта",
      prioritet: "4",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из второго объекта",
      prioritet: "1",
      status: "В работе"
    }, {
      comments: "какой-то комментарий из третьего объекта",
      prioritet: "2",
      status: "Просрочено более 7 дней"
    }, {
      comments: "какой-то комментарий из четвертого объекта",
      prioritet: "3",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из пятого объекта",
      prioritet: "5",
      status: "Просрочено до 7 дней"
    }];

    console.log(getStatus(projects, "Выполнено"));

рони 26.07.2017 12:51

фильтрация массива по условию
 
phoenix200689,
или так
function getStatus(array, search) {
    return array.filter(function(item) {
            return search(item)
    })
};


var projects = [{
      comments: "какой-то комментарий из первого объекта",
      prioritet: "4",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из второго объекта",
      prioritet: "1",
      status: "В работе"
    }, {
      comments: "какой-то комментарий из третьего объекта",
      prioritet: "2",
      status: "Просрочено более 7 дней"
    }, {
      comments: "какой-то комментарий из четвертого объекта",
      prioritet: "3",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из пятого объекта",
      prioritet: "5",
      status: "Просрочено до 7 дней"
    }];

    console.log(getStatus(projects, function(item) {
  return item.status === "Выполнено"
}));

phoenix200689 26.07.2017 16:25

Спасибо, Рони :)

Dilettante_Pro 26.07.2017 16:58

Вариант - на базе оригинала
function getStatus(array, search) {
    var values = [];
    
    array.forEach(function(item) {
      if (item.status === search) {
        values.push(item);
      }
    });

    return values;
};


var projects = [{
      comments: "какой-то комментарий из первого объекта",
      prioritet: "4",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из второго объекта",
      prioritet: "1",
      status: "В работе"
    }, {
      comments: "какой-то комментарий из третьего объекта",
      prioritet: "2",
      status: "Просрочено более 7 дней"
    }, {
      comments: "какой-то комментарий из четвертого объекта",
      prioritet: "3",
      status: "Выполнено"
    }, {
      comments: "какой-то комментарий из пятого объекта",
      prioritet: "5",
      status: "Просрочено до 7 дней"
    }];
    
    console.log(getStatus(projects, "Выполнено"));

phoenix200689 27.07.2017 09:42

спасибо:victory:


Часовой пояс GMT +3, время: 17:42.