首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JS中销毁对象

在JS中销毁对象
EN

Code Review用户
提问于 2022-05-06 09:13:51
回答 3查看 86关注 0票数 0

我编写的解决方案正按预期工作,但以下是我的功能:

代码语言:javascript
复制
const dataExtraction = () => {
  const { id, name, sprites, types } = data;
  const pokemonType= types[0].type.name;
  const { front_default } = sprites;
  const animated= sprites.versions['generation-v']['black-white'].animated.front_default;
  
  return { 
         id, //6
         name, //charizard
         pokemonType, //fire
         front_default, //image url
         aniamted //image url
  }
}

下面有JSON有效负载,并且提取了我想要使用的数据。我遵循了一种非常标准的方法来导航到嵌套对象,但是如果有更好的解决方案或更简洁的方法来编写上面的函数,我想征求人们的意见:

https://pastebin.com/7LUPLbMm

EN

回答 3

Code Review用户

发布于 2022-05-06 11:03:21

  1. 使用箭头函数作为内联函数并不能使代码非常可读性。
  2. 如果变量只使用一次,为什么要赋值?
代码语言:javascript
复制
function extractData (json) {  
    return { 
        id: json.id,
        name: json.name,
        pokemonType: json.types[0].type.name,
        front_default: json.sprites.front_default,
        animated: json.sprites.versions['generation-v']['black-white'].animated.front_default
    };
}
票数 1
EN

Code Review用户

发布于 2022-05-06 12:28:40

超短的评论;

  • data似乎是一个具有超级泛型名称的全局变量,这是个坏主意
  • 解构很酷,但就个人而言,这感觉太过分了。
  • 函数名通常是<verb><subject>,所以可能是extractData,甚至是extractPokemon
  • 我喜欢你使用const和评论

我正准备写一个反例,但理查德·N处理了这个问题。

票数 1
EN

Code Review用户

发布于 2022-05-06 15:38:27

我认为 上一首的答案提供了改进,但我想提出另一个建议:)

当像这样处理JSON时,深度查找带来的脆弱性会使我的脊柱颤抖--我觉得它很容易出错,因为如果数据或数据形状发生了变化,例如undefinednull在链中的某个位置,这段代码就会崩溃。

我建议您使用经过良好测试的库方法(如get ),而不是建议使用可以工作的try/catch方法。

然后您将有一些更健壮的东西,如下所示:

代码语言:javascript
复制
import { get } from 'lodash';

const mapJsonToPokemonItem = (data) => ({
  id: get(data, 'id'),
  name: get(data, 'name'),
  pokemonType: get(data, 'types[0].type.name'),
  front_default: get(data, 'sprites.front_default'),
  animated: get(data, "sprites.versions['generation-v']['black-white'].animated.front_default"),
});

请注意以下事项:

  1. 为了更好地描述函数的实际功能,我将函数命名为mapJsonToPokemonItem
  2. 接受data作为参数,以避免对此变量的外部范围的依赖。
  3. 直接返回一个具有=> ({})语法的对象,因为除了映射之外,在函数中不需要执行。
  4. 您还可以为get调用提供一个默认值,例如:get(object, 'a.b.c', 'default'),这可能对回退图像很有用,等等。
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/276349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档