具有多个参数的函数的控制台输出
我有这个类方法:
searchForProduct({productName, manufacturer, seller}, itemsPerPage = 20, onlyAvailable = true) {
console.log(Searching for...) // Here's what is my question about
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
如何打印出我传递给方法的所有参数?
想要实现的是:
searchForProduct({productName: laptop});
// Output:
"Searching for productName: 'laptop'"
// or
searchForProduct({productName: "laptop", manufacturer: "Dell"});
// Output:
"Searching for productName: 'laptop', manufacturer: 'Dell'"
Run Code Online (Sandbox Code Playgroud)
等等...
另外(如果可以使用任何建议的方法)我不想打印出默认值itemsPerPage,onlyAvailable即使它会被传递给方法。
更新:
哇,我没想到答案中有这么多巧妙的方法。但是我应该承认我不允许更改此功能。基本上我只需要根据我的个人需求添加此输出,因为更改此方法将“破坏一切”。
我很抱歉你花时间建议传递对象而不是破坏的参数。无论如何我都会赞成你的答案
UPD2:
我尝试了一些建议,但仍然没有达到完美的结果:
searchForProduct({productName, manufacturer, seller}, itemsPerPage = 20, onlyAvailable = true) {
function buildString({firstArgument, secondArgument, thirdArgument}) {
return {
productName: (firstArgument !== undefined) ? firstArgument : "",
manufacturer: (secondArgument !== undefined) ? secondArgument : "",
seller: (thirdArgument !== undefined) ? thirdArgument : ""
}
}
const searchString = buildString({productName, manufacturer, seller})
const displayStr = Object.entries(searchString)
.map(([key, val]) => key + ': ' + val)
.join(', ');
console.log('Searching for', displayStr);
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
该buildString功能超级丑陋,但它可以在不改变原始功能的情况下工作。
但是,当并非所有参数都通过时,我遇到了一个问题
它看起来像:
"Searching for productName: "laptop", manufacturer: "Dell", seller: undefined
Run Code Online (Sandbox Code Playgroud)
我试过:
function buildString({firstArgument, secondArgument, thirdArgument}) {
return {
productName: (firstArgument !== undefined) ? firstArgument : delete productName,
manufacturer: (secondArgument !== undefined) ? secondArgument : delete manufacturer,
seller: (thirdArgument !== undefined) ? thirdArgument : delete seller
}
}
Run Code Online (Sandbox Code Playgroud)
但这给了我:
"Searching for productName: "laptop", manufacturer: "Dell", seller: true
Run Code Online (Sandbox Code Playgroud)
根据 MDN:
尝试删除不存在的属性时,返回 true
然而财产确实存在——它的价值不存在。所以我上面尝试的是删除没有值的对象键。目前没有成功
我不会解构第一个参数 - 相反,将其字符串化或迭代其条目以提取其键和值:
const searchForProduct = (obj) => {
console.log('Searching for', JSON.stringify(obj));
};
searchForProduct({productName: 'laptop'});
searchForProduct({productName: "laptop", manufacturer: "Dell"});Run Code Online (Sandbox Code Playgroud)
const searchForProduct = (obj) => {
const displayStr = Object.entries(obj)
.map(([key, val]) => key + ': ' + val)
.join(', ');
console.log('Searching for', displayStr);
};
searchForProduct({productName: 'laptop'});
searchForProduct({productName: "laptop", manufacturer: "Dell"});Run Code Online (Sandbox Code Playgroud)
您还可以使用执行相同操作的包装函数:
const searchForProductWrapper = (obj, itemsPerPage = 20, onlyAvailable = true) => {
const displayStr = Object.entries(obj)
.map(([key, val]) => key + ': ' + val)
.join(', ');
console.log('Searching for', displayStr);
searchForProduct(obj, itemsPerPage, onlyAvailable);
};
const searchForProduct = (obj, itemsPerPage, onlyAvailable) => {
console.log('true searchForProduct', obj, itemsPerPage, onlyAvailable);
};
searchForProductWrapper({productName: 'laptop'}, 10);
searchForProductWrapper({productName: "laptop", manufacturer: "Dell"});Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |