ane*_*gib 3 javascript arrays object
我有一系列看起来像这样的对[[x,y], [x,y] ... ]。我想将其格式化为一个对象,其中值是 x 和 y 值的数组,如下所示{keys: [x1, x2, x3 ...], values: [y1, y2, y3 ... ]}。
是否有任何数组/对象操作可以完成此操作而无需迭代原始列表?
最简单、最安全的方法是将数组简化为对象,尽管它需要循环:
const input = [[3, 300], [2, 200], [1, 100]];
const result = input.reduce((acc, [key, val]) => {
  acc.keys.push(key);
  acc.values.push(val);
  
  return acc;
}, { keys: [], values: [] });
console.log(result);我实际上不会使用转换为对象/映射方法(在原始答案下),因为它有一个严重的警告 - 具有相同键的重复条目将被覆盖。
例如:
const input = [[3, 300], [3, 200], [3, 100]];
const obj = Object.fromEntries(input);
const result = { keys: Object.keys(obj), values: Object.values(obj) };
console.log(result);在pilchard 的回答之上,我会将数组转换为 Map,然后获取 Map 的键和值。我会使用 Map,而不是对象,因为对象的键始终是字符串,如果值是整数,则对象也会按它们的值排序。Map 将保留原始类型,并且不会重新排序。
const input = [[3, 300], [4, 200], [1, 100]];
const map = new Map(input);
const result = { keys: [...map.keys()], values: [...map.values()] };
console.log(result);将相同结构转换为对象的示例:
const input = [[3, 300], [4, 200], [1, 100]];
const obj = Object.fromEntries(input);
const result = { keys: Object.keys(obj), values: Object.values(obj) };
console.log(result);| 归档时间: | 
 | 
| 查看次数: | 101 次 | 
| 最近记录: |