JSFiddle - React, Tailwind, and code Playground

JavaScript

rules = [
      'out.items[].name=inp[].name',
      'out.items[].sku[].num=inp[].skus[].num'
    ];

    inp = [{
        'name': 'Hammer',
        'skus':[{'num':'12345qwert','test':'ignore'}]
      },{
        'name': 'Bike',
        'skus':[{'num':'asdfghhj'},{'num':'zxcvbn'}]
      },{
        'name': 'Fork',
        'skus':[{'num':'0987dfgh'}]
    }];

    function process() {
      if (typeof out == 'undefined') {
        out = {};
      }
      var j, r;
      for (j = 0; j < rules.length; j++) {
        r = rules[j].split('=');
        if (r.length != 2) {
          console.log('invalid rule: symbol "=" is expected exactly once');
        } else if (r[0].substr(0, 3) != 'out' || r[1].substr(0, 3) != 'inp') {
          console.log('invalid rule: expected "inp...=out..."');
        } else {
          processRule(r[0].substr(3).split('[]'), r[1].substr(3).split('[]'), 0, inp, out);
        }
      }
    }

    function processRule(l, r, n, i, o) { // left, right, index, in, out
      var t = r[n].split('.');
      for (var j = 0; j < t.length; j++) {
        if (t[j] != '') {
          i = i[t[j]];
        }
      }
      t = l[n].split('.');
      if (n < l.length - 1) {
        for (j = 0; j < t.length - 1; j++) {
          if (t[j] != '') {
            if (typeof o[t[j]] == 'undefined') {
              o[t[j]] = {};
            }
            o = o[t[j]];
          }
        }
        if (typeof o[t[j]] == 'undefined') {
          o[t[j]] = [];
        }
        o = o[t[j]];
        for (j = 0; j < i.length; j++) {
          if (typeof o[j] == 'undefined') {
              o[j] = {};
          }
          processRule(l, r, n + 1, i[j], o[j]);
        }
      } else {
        for (j = 0; j < t.length - 1; j++) {
          if (t[j] != '') {
            if (typeof o[t[j]] == 'undefined') {
              o[t[j]] = {};
            }
            o = o[t[j]];
          }
        }
        o[t[j]] = i;
      }
    }

    process();
    console.log(out);