Преобразование массива массивов как элементов в объект с объектами в качестве элементов

Самый простой способ - сначала сменить переменную на String и принять ввод как строку. Затем вы можете управлять на основе входной переменной с инструкцией if-else или switch следующим образом.

Scanner reader = new Scanner(System.in);

String c = reader.nextLine();
switch (c) {
    case "a":
        <your code here>
        break;
    case "b":
        <your code here>
        break;
    default: 
        <your code here>
}
0
задан Panos 3 March 2019 в 16:17
поделиться

4 ответа

Вы на правильном пути. Просто использование функции было неправильным. Я повторно использовал код и обновил его, чтобы он работал нормально. Для функции $ .each первое значение - это индекс ( docs ), который был основной причиной ошибки.

Я обновил код, и он отлично работает.

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];
obj = {}
$.each(arr,function(index)
{
    obj[arr[index][0]] = obj[arr[index][0]] || {}
    obj[arr[index][0]][arr[index][1]] = arr[index].slice(2);
});
console.log(obj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Примечание: Решение является специфическим для вышеуказанного требования. Тем не менее, он может быть обобщен с помощью рекурсии.

Надеюсь, это поможет. Возврат для любых сомнений / разъяснений.

0
ответ дан Sunil 3 March 2019 в 16:17
поделиться

Вы можете использовать reduce и деструктурирование следующим образом:

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];

const newArray = arr.reduce((acc, [key, key2, ...rest]) => {
  acc[key] = acc[key] || {};
  acc[key][key2] = rest
  return acc;
}, {})

console.log(newArray)

0
ответ дан adiga 3 March 2019 в 16:17
поделиться

Вот простой пример работы со списком списков (в соответствии с вашими примерами) с минимальным размером листовых массивов, передаваемых в качестве параметра (в вашем случае - 2).

Отображение извлекает ключ и накапливает массивы, в то время как нормализация рекурсивно уменьшает массивы, пока не будет достигнут удовлетворительный результат.

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];

console.log(transform(arr, 2));

function transform(input, minSize) {

  return normalize(map(input, {}), minSize);

  function map(input, result) {
    for (var ii = 0; ii < input.length; ii++) {
      var row = input[ii];
      if (row.length == 0) {
        continue;
      }

      var first = row[0];
      var list = result[first] || (result[first] = []);
      list.push(cdr(row));
    }
    return result;
  }

  function normalize(result, minSize) {
    for (var key in result) {
      var list = result[key];
      if (list.length == 0) {
        continue;
      }
      var first = list[0];
      if (list.length == 1 && first.length <= minSize) {
        result[key] = first;
        continue;
      }
      result[key] = transform(list, minSize);
    }
    return result;
  }

  function cdr(list) {
    var result = [];
    for (var ii = 1; ii < list.length; ii++) {
      result.push(list[ii]);
    }
    return result;
  }
}

0
ответ дан Elegie 3 March 2019 в 16:17
поделиться

Используя Reduce в библиотеке Lodash, вы можете сделать следующее, где arr - ваш входной массив.

_.reduce(arr, function(acc, val) { var k1 = val[0], k2 = val[1], val = val.slice(2); acc[k1] = acc[k1] || {}; acc[k1][k2] = val; return acc; }, {});

0
ответ дан Nick 3 March 2019 в 16:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: