@toly19

Как в Ramda.js изменить значение для всех элементов массива?

Есть некий массив
let arr = [{
  enabled: true,
  categories: [{
    enabled: false
    //...
  }, {
    enabled: false
  }, {
    enabled: true
  }]
}]

Мне нужно установить свойство enabled в true для всех элементов свойства categories
  • Вопрос задан
  • 197 просмотров
Пригласить эксперта
Ответы на вопрос 3
miraage
@miraage
Старый прогер
Не уверен, что это самое лаконичное решение..

const R = require('ramda');

const input = [{
  enabled: true,
  categories: [{
    enabled: false,
  }, {
    enabled: false,
  }, {
    enabled: true,
  }],
}];

const setEnabled = entry => {
  if (entry.enabled) {
    return entry;
  }

  return Object.assign({}, entry, { enabled: true });
};

const walkCategory = entry => {
  return Object.assign({}, entry, {
    categories: R.map(setEnabled, entry.categories),
  });
};

const result = R.map(walkCategory, input);

console.log(JSON.stringify(result, null, 2));


[
  {
    "enabled": true,
    "categories": [
      {
        "enabled": true
      },
      {
        "enabled": true
      },
      {
        "enabled": true
      }
    ]
  }
]
Ответ написан
rework
@rework
Помог ответ? В благодарность отметь его решением
только для всех элементов свойства categories

var input = [{
  enabled: true,
  categories: [{
    enabled: false,
  }, {
    enabled: false,
  }, {
    enabled: true,
  }],
}];

const walkCategory = entry => {
  return Object.assign({}, entry, { enabled: true });
};

input[0].categories = R.map(walkCategory, input[0].categories);

console.log(input);
Ответ написан
Комментировать
@devunion
Простите, я редко использую Ramda, но вот просто так сделать нельзя?

R.map(cat => cat.enabled = true, input[0].categories);

или вот так, если нужно будет выключать:

const enableCat = enabled => cat => cat.enabled = enabled;
R.map(enableCat(true), input[0].categories);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 17:14
4000 руб./за проект
29 мар. 2024, в 17:04
5000 руб./за проект
29 мар. 2024, в 17:03
3000 руб./за проект