【问题标题】:Destructing assignment javascript doesnt work [duplicate]解构赋值javascript不起作用[重复]
【发布时间】:2020-12-24 07:49:20
【问题描述】:

我试图破坏一个 json。这是原文:

const shoppingLists = [
{
id: 0,
name: "empty shopppinglist",
location: "",
targetDate: "",
priority: "",
isFinished: false,
items: [{
    name: ""
}]
},
{
    id: 1,
    name: "full shopppinglist",
    location: "migros",
    targetDate: "",
    priority: "1",
    isFinished: true,
    items: [{
        name: "apfel"
    }]
}}

我现在只需要包含元素但没有项目列表的列表

const { id, name, location, targetDate, priority, isFinished } = shoppingLists
res.send(shoppingLists)

但是当我接收/记录购物清单时,我总是会再次获得整个对象。

我也尝试过物品,...休息但最后结果相同,我做错了什么?

【问题讨论】:

  • shoppingLists 是数组
  • 解构的要点是它是分配与对象或数组中分别存在的键或位置相对应的变量的简写。在您的示例中,您正在解构一个不适用于该语法的数组。检查文档。
  • 您还可以对该数组创建一个new Set 并从其中的每个对象中切出itemsres.send(newArr) - 而不是破坏
  • "我只需要列表,但没有项目列表"。像这样的东西:const newList = shoppingLists.map(({ items, ...rest }) => rest)
  • 我完全忘记了这对列表不起作用 const newList = shoppingLists.map(({ items, ...rest }) => rest) 解决了问题

标签: javascript destructuring


【解决方案1】:

你应该改变你的语法,因为shoppingLists 是一个array

const { id, name, location, targetDate, priority, isFinished } = shoppingLists[0]

另外,如果你想从array 中删除一个项目,你肯定需要使用splice,或者如果你想删除第一个元素然后将其值作为返回值,那么你应该使用shift

const { id, name, location, targetDate, priority, isFinished } = shoppingLists.shift()

【讨论】:

  • const [{ id, name, location, targetDate, priority, isFinished }] = shoppingLists
  • 是的 array destructuring 也可以,但 OP 可能希望从数组中删除元素,然后将其分配给对象。这就是我包含shift 示例代码的原因。
猜你喜欢
  • 2018-04-19
  • 1970-01-01
  • 2023-03-29
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2018-04-07
  • 2021-09-10
相关资源
最近更新 更多