elite-libs/rules-machine

Array Operator Objects

justsml opened this issue · 1 comments

Array methods using object-syntax

Proposed array extensions

Simple .map

{
  map: 'itemList',
  run: { return: '$item.id' },
}

Complex .map

Filters out negative scores, creates return object scoreById:

[
  'idList = [12, 34, 56]',
  'userScore = {"12": 99.9, "34": 100.1, "56": -42.0 }',
  {
    map: 'idList',
    run: [
      { if: 'userScore[$item] < 0', then: 'userScore[$item] = 0' },
      'set("scoreById", $item, userScore[$item])'
    ],
  },
  { return: 'scoreById' }
]

Reduce

[{
  reduce: '[1, 2, 3, 4]',
  run: '$item * 2 + $index',
  set: 'results',
}, { return: 'results' }]

Filter

[{
  filter: '[1, 2, 3, 4]',
  run: '$item % 2 == 0',
  set: 'evenNumbers',
}, { return: 'evenNumbers' }]

Object literals aren't supported yet. 'userScore = {"12": 99.9, "34": 100.1 }' become inpur.userScore = [100.1 , undefined]