像JS中的数组那样分解对象?

时间:2019-09-18 15:12:05

标签: javascript

给出以下代码:

const civic = {make: 'Honda', model: 'Civic'};

function logArgs(make, model) {
  console.log(make);
  console.log(model)
}

我想这样做:

logArgs(...civic);

代替:

logArgs(civic.make, civic.model);

我得到:

  

(索引):39未捕获的TypeError:发现不可调用的@@ iterator

是否有某种方法可以解构数组之类的对象,或者我想做的是不可能的?

4 个答案:

答案 0 :(得分:4)

使用destructuring in arguments

const civic = {make: 'Honda', model: 'Civic'};

function logArgs({make, model}) {
  console.log(make);
  console.log(model)
}

logArgs(civic)

答案 1 :(得分:1)

logArgs(...Object.values(civic))

请注意,这将取决于对象的顺序,这可能很棘手

答案 2 :(得分:1)

要传播,您需要为对象实现Symbol.iterator,因为对象没有内置的迭代器。

此方法仅采用值,但是其他任何方法也可以使用,例如返回条目。

function logArgs([make, model]) {
  console.log(make);
  console.log(model)
}

const civic = { make: 'Honda', model: 'Civic' };

civic[Symbol.iterator] = function* () {
    yield Object.values(civic);
};

logArgs(...civic);

答案 3 :(得分:0)

在分解对象参数civic时,我们获得了更简洁的功能,或者您可以对civic进行分解以分配不同的变量,如下所示

const civic = {make: 'Honda', model: 'Civic'};
const { make, model, year = "2019" } = civic; 
 console.log(make);
  console.log(year);

function logArgs({make, model}) {
  console.log(make);
  console.log(model)
 
}

logArgs(civic)