У меня есть 2 массива, которые я хочу "уменьшить" в 1 объект.
так, например:
Я имею..
var originalData = [1,2,3];
var newData = [3,1,2];
я хочу объединить эти два массива в объект, который выглядит следующим образом:
var newOrderObject = {1:3, 2:1, 3:2};
Я использую функцию редукции, но кажется, что они отображаются по-разному.
var newOrderObject = originalData.reduce(function(newData) {
var orderObject = {};
originalData = newData;
return orderObject;
}, {});
любые предложения будут оценены
Уменьшите 1-й массив (ключи) и возьмите значения из 2-го массива, используя index
:
var originalData = [1,2,3];
var newData = [3,1,2];
var newOrderObject = originalData.reduce(function(obj, key, index) {
obj[key] = newData[index];
return obj;
}, {});
console.log(newOrderObject);
Вы просто используете. .reduce
неправильно.
Используйте все 3, и вы получите желаемый результат.
var originalData = [1,2,3];
var newData = [3,1,2];
var newOrderObject = originalData.reduce(function(acc, item, i) {
return Object.assign(acc, { [item]: newData[i] })
}, {});
console.log(newOrderObject)
Вы можете сопоставить отдельные объекты и назначить их одному объекту. Если возможны пустые массивы, используйте пустой объект в качестве целевого значения.
var keys = [1, 2, 3],
values = [3, 1, 2],
object = Object.assign({}, ...keys.map((k, i) => ({ [k]: values[i] })));
console.log(object);
Более чистым подходом было бы перенести массивы в массив пар ключ/значение, а затем отобразить объект.
const transpose = (r, a) => a.map((v, i) => (r[i] || []).concat(v));
var keys = [1, 2, 3],
values = [3, 1, 2],
object = Object.assign(
{},
...[keys, values]
.reduce(transpose, [])
.map(([k, v]) => ({ [k]: v }))
);
console.log(object);
var originalData = [1, 2, 3];
var newData = [3, 1, 2];
var newarray = newData.reduce(function(result, field, index) {
result[originalData[index]] = field;
return result;
}, {})
console.log(newarray);
Это еще одна альтернатива для того, что вы ищете, без использования .reduce
var originalData = [1, 2, 3];
var newData = [3, 1, 2];
var result = {};
originalData.forEach((key, i) => result[key] = newData[i]);
console.log(result);