复杂解构:对象位于数组的第一个索引内,该索引位于另一个对象内

Complex Destructuring: Object inside first index of Array that is inside another Object

考虑这个 'complex' 对象:

const obj = {
    nestedArray: [
        { stuff: "things" }
    ],
    nestedObj: {
        key1: "value1",
        key2: "value2"
    }
}

我正在寻找一种优雅的单行解决方案来从 obj.

解构 key1key2stuff

我当前的解决方案如下所示并且工作正常:

const { nestedArray, nestedObj: { key1, key2 } } = obj
const { stuff } = nestedArray[0]

但我宁愿像这样在一行中完成:

const { array[0]: { stuff }, nestedObject: { key1, key2 } } = obj

但显然那是行不通的。有什么办法可以像我想要的那样在一行中做到这一点?还是我对 ES6 的要求太多了?我很乐意接受“否”的答案,只要它能很好地解释为什么不。

你非常接近,只需使用数组解构和对象解构即可得到 stuff:

const obj = {
    nestedArray: [
        { stuff: "things" }
    ],
    nestedObj: {
        key1: "value1",
        key2: "value2"
    }
}

const { nestedArray: [{ stuff }], nestedObj: { key1, key2 } } = obj

console.log({ stuff, key1, key2 })

虽然它是 可能 ,但是通过将 stuff 列为它在嵌套数组中的位置,非常类似于您声明一个包含 [= 对象的数组11=] 属性:

const obj = {
    nestedArray: [
        { stuff: "things" }
    ],
    nestedObj: {
        key1: "value1",
        key2: "value2"
    }
};
const { nestedArray: [{ stuff }], nestedObj: { key1, key2 } } = obj;
console.log(stuff);

我不推荐它 - 像这样的代码很难阅读。