我有2个要“简化”为1个对象的数组。
例如:
我有..
var originalData = [1,2,3];
var newData = [3,1,2];
我想将这两个数组组合成一个看起来像这样的对象:
var newOrderObject = {1:3, 2:1, 3:2};
im使用reduce函数,但似乎将它们映射的方式不同
var newOrderObject = originalData.reduce(function(newData) {
var orderObject = {};
originalData = newData;
return orderObject;
}, {});
任何建议都会被赞赏
答案 0 :(得分:6)
减少第一个数组(键),并使用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);
答案 1 :(得分:3)
您可以映射单个对象并将其分配给单个对象。如果可以使用空数组,请使用一个空对象作为目标值。
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);
答案 2 :(得分:3)
您只是错误地使用.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)