Самый простой способ - сначала сменить переменную на 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>
}
Вы на правильном пути. Просто использование функции было неправильным. Я повторно использовал код и обновил его, чтобы он работал нормально. Для функции $ .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>
Примечание: Решение является специфическим для вышеуказанного требования. Тем не менее, он может быть обобщен с помощью рекурсии.
Надеюсь, это поможет. Возврат для любых сомнений / разъяснений.
Вы можете использовать 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)
Вот простой пример работы со списком списков (в соответствии с вашими примерами) с минимальным размером листовых массивов, передаваемых в качестве параметра (в вашем случае - 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;
}
}
Используя 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; }, {});