Objecy.keys()。map()与Array.map()

时间:2019-11-26 10:10:29

标签: javascript arrays object javascript-objects

您能给我一个论点,为什么方法A优于方法B。

方法A:

const transformCompanyOptions = (companies: Array<{id: string, name: string}>, selectedId: string) => {
  return companies.map(key => {
    return {
      value: key.id,
      label: key.name,
      checked: key.id === selectedId
    }
  })
};

方法B:

const transformCompanyOptions = (companies: Array<{id: string, name: string}>, selectedId: string) => {
 const ret = Object.keys(companies).map((key) => {
    const newCompany = {};
    newCompany['value'] = companies[key].id;
    newCompany['label'] = companies[key].name;
    if (companies[key].id === selectedId) {
      newCompany['checked'] = true;
    }
    return newCompany;
  });
  return ret;
};

谢谢

1 个答案:

答案 0 :(得分:6)

方法A为:

  • 更短
  • 不太冗长
  • 清洁剂
  • 具有更好的性能(方法B中,您首先需要通过Object.keys获取所有密钥)

此外,方法A可以改进:

const transformCompanyOptions = (companies: Array<{id: string, name: string}>, 
    selectedId: string) => {
  return companies.map(c => ({ 
      value: c.id,
      label: c.name,
      checked: c.id === selectedId
    }))
};

@TKoL在评论中说:

  

尝试避免将.map中的参数作为键调用,因为   它实际上是公司本身,而不是将key插入数组