分解函数map和reduce - JS

3

我正在处理一个函数:

function transformEmployeeData(array) {
  return array.map(function(data) {
    return data.reduce(function(a, b) {
      a[b[0]] = b[1];
      return a;
    }, {})
  });
}
transformEmployeeData(array);

该函数将数组转换为如下格式的对象:
[
    {firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'},
    {firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'}
]

所以,如果你有一个数组:
[
    [
        ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
    ],
    [
        ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
    ]
]

它会将其转换为那样。我想聚焦于这部分:
return array.map(function(data) {
    return data.reduce(function(a, b) {
      a[b[0]] = b[1];
      return a;
    }, {})
  });

我学习了map函数,它可以迭代数组并对其执行某些操作,而reduce函数将数组压缩成单个值。目前我不清楚这两个函数如何协同工作并返回转换后的数组对象。有没有人能够用通俗易懂的语言帮助我理解这些部分?如果没有,有没有更简单的方法实现相同的功能?
抱歉,我是新手。

请查看此链接-https://danmartensen.svbtle.com/javascripts-map-reduce-and-filter,其中介绍了有关map、reduce和filter的内容。 - Naga Sai A
1个回答

1
在这个意义上,映射一个数组意味着基于某个映射函数返回一个新的数组,其中每个值都被转换了。

const numbers = [1, 2, 3];
const squares = numbers.map(num => num ** 2);
console.log(squares);

减少数组的意思就是将其元素组合成一个单一的值,就像你所说的那样。

const numbers = [1, 2, 3];
const sum = numbers.reduce((total, num) => total + num, 0);
console.log(sum);

在您的情况下,您有三层嵌套的数组,该过程可以分为三个功能单元。理解发生的事情最简单的方法是从最内部的点开始,向外到达顶级数组的映射。
在最内部的层次上,一个由两个元素组成的数组以[property, value]的形式添加到对象中,其中第一个元素是属性名称,第二个是值。

const arr = ['name', 'bob'];

// property is item[0], value is item[1]
const propertyName = arr[0];
const propertyValue = arr[1];

const obj = {};
obj[propertyName] = propertyValue;

console.log(obj); // { name: 'bob' }

在中间层,我们有一个数组,其中每个元素都是上述的2元素数组。通过将每个2元素数组转换为对象的属性和值,这个数组的数组被简化为一个对象。

const arr = [
  ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
];

const reduced = arr.reduce((obj, item) => {
  obj[item[0]] = item[1]; // add property and value to new object
  return obj;             // return the object so next array item can be converted
}, {});

console.log(reduced);

最后,顶层映射将上述2元素数组的数组(3级数组)转换为具有先前提到的属性和值的对象数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接