繁体   English   中英

如何使用数组解构重构此函数?

[英]how can i refactor this function using array destructuring?

大家好,

我已经构建了这个函数来将 Api 的获取数据转换为对象数组,但是 linter 要求我使用数组解构。

你能帮帮我吗? 我只是一个初学者,所以请善待!

 export const organiceData = async () => { const data = await getData(); const toArr = Object.entries(data); let newBook; const arr = []; toArr.forEach((book) => { newBook = book; newBook[1][0].id = book[0]; arr.push(newBook[1][0]); }); return arr; };

忽略该特定警告消息。 但是你仍然应该在你的代码中修复一些东西:

  • 使用map而不是forEach + push
  • 摆脱无用的newBook别名-分配不是创建副本,当然也不是对象的深层副本
  • book实际上不是 book 对象,它是一个表示键值对的元组(双元素数组)。 book 对象是值 - 或者更确切地说,它似乎包含在值的第一个元素中,该元素本身就是一个数组。
export async function organiceData() {
  const data = await getData();
  return Object.entries(data).map(pair => {
    pair[1][0].id = pair[0];
    return pair[1][0];
  });
}

现在我们也可以使用解构来代替pair变量,就像const key = pair[0], value = pair[1];

export async function organiceData() {
  const data = await getData();
  return Object.entries(data).map(([key, value]) => {
    value[0].id = key;
    return value[0];
  });
}

如果要在对象上添加id属性之前创建对象的副本,以不改变它,您可以在对象文字中使用扩展语法。 我们还可以进一步对值使用解构(如const book = value[0]; ):

export async function organiceData() {
  const data = await getData();
  return Object.entries(data).map(([key, [book]]) => {
    return {...book, id: key};
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM