Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 像JS中的数组一样分解对象?_Javascript - Fatal编程技术网

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

Javascript 像JS中的数组一样分解对象?,javascript,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未捕获类型错误:找到不可调用的@迭代器 是否有某种方法可以分解数组之类的对象

给定以下代码:

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

function logArgs(make, model) {
  console.log(make);
  console.log(model)
}
我想这样做:

logArgs(...civic);
而不是:

logArgs(civic.make, civic.model);
我得到:

(索引):39未捕获类型错误:找到不可调用的@迭代器

是否有某种方法可以分解数组之类的对象,或者我试图做的事情是不可能的?

使用

const-civic={make:'Honda',model:'civic'};
函数logArgs({make,model}){
控制台日志(make);
console.log(模型)
}

logArgs(civic)
在分解对象参数civic时,我们得到了一个更简洁的函数,或者您可以只分解
civic
来分配不同的变量,如下所示

const-civic={make:'Honda',model:'civic'};
const{make,model,year=“2019”}=civic;
控制台日志(make);
对数(年);
函数logArgs({make,model}){
控制台日志(make);
console.log(模型)
}
logArgs(思域)

请注意,这将取决于对象的顺序,这可能很难进行扩展,因为对象没有内置迭代器,所以需要为对象实现一个迭代器

这种方法只接受值,但任何其他方法都可以工作,比如返回条目

函数日志参数([make,model]){
控制台日志(make);
console.log(模型)
}
const civic={make:'Honda',model:'civic'};
civic[Symbol.iterator]=函数*(){
屈服对象。价值观(公民);
};

logArgs(…civic)现在还不清楚你喜欢在传播后使用哪个函数。我不认为这回答了这个问题,但它是正确的,我不确定这个问题是否真的可以回答…所以请使用+1!这只适用于给定的对象,OP不需要任何对象的通用版本吗?我已经展示了函数参数destructuring和object destructuring,但没有完全说明这与Juan的答案有什么不同。我还必须查找:*Ty再次获得有趣的答案。这是我最终使用的解决方案,谢谢。尼娜也有一个有趣的方法。
logArgs(...Object.values(civic))