Ecmascript 6 rest参数与对象的用法
我试图通过传递一些对象值作为rest参数来获取用户信息。每当我试图传递2个参数时,代码就会抛出一个错误(未定义)。我错过了什么 这里是我正在尝试做的链接Ecmascript 6 rest参数与对象的用法,ecmascript-6,parameter-passing,Ecmascript 6,Parameter Passing,我试图通过传递一些对象值作为rest参数来获取用户信息。每当我试图传递2个参数时,代码就会抛出一个错误(未定义)。我错过了什么 这里是我正在尝试做的链接 让用户地址=[{ “街道”:“someStreet1”, “房子”:“1”, “person”:“User1” }, { “街道”:“someStreet2”, “房子”:“2”, “person”:“User2” }, { “街道”:“someStreet3”, “房子”:“3”, “person”:“User3” }]; 让userInf
让用户地址=[{
“街道”:“someStreet1”,
“房子”:“1”,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:“2”,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:“3”,
“person”:“User3”
}];
让userInfo=[];
让addressToCheck=(…newUserHouse)=>{
for(用户地址的let地址){
if(newUserHouse==地址.house){
userInfo.push(地址.人);
console.log(userInfo);
}
}
}
日志(addressToCheck(3,2))代码>代码不会抛出未定义的
错误,它只是记录值未定义的
。这是因为您正在调用console.log
,对addressToCheck
的返回值执行操作,但该函数不返回值,因此它隐式返回undefined
。看
但是,您的代码还有更多的问题。由于使用松散比较(==
),只有在传递单个参数时它才会意外工作
rest参数的值始终为数组。这意味着您正在进行以下比较:
[1, 2] == "1"
[1, 2] == "2"
[1, 2] == "3"
我希望这是显而易见的为什么不能工作。具有多个元素的数组不能等于单个“元素”,因此永远不会满足if
条件
由于[1]
的字符串表示形式仅为“1”
,因此它会意外地使用单个参数。但是,如果[1,2]
的字符串表示形式是“1,2”
您没有解释所需的结果是什么,但如果要为提供的输入选择所有地址,则应使用.filter
。您可以将提供的参数转换为一个集合,以便快速查找
只需从函数返回结果,而不是将值赋给“外部”数组
让用户地址=[{
“街道”:“someStreet1”,
“房子”:“1”,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:“2”,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:“3”,
“person”:“User3”
}];
让addressToCheck=(…newUserHouse)=>{
newUserHouse=新集合(newUserHouse);
返回userAddress.filter(address=>newUserHouse.has(address.house));
};
控制台日志(addressToCheck(“3”,“2”))代码>代码不会抛出未定义的
错误,它只是记录值未定义的
。这是因为您正在调用console.log
,对addressToCheck
的返回值执行操作,但该函数不返回值,因此它隐式返回undefined
。看
但是,您的代码还有更多的问题。由于使用松散比较(==
),只有在传递单个参数时它才会意外工作
rest参数的值始终为数组。这意味着您正在进行以下比较:
[1, 2] == "1"
[1, 2] == "2"
[1, 2] == "3"
我希望这是显而易见的为什么不能工作。具有多个元素的数组不能等于单个“元素”,因此永远不会满足if
条件
由于[1]
的字符串表示形式仅为“1”
,因此它会意外地使用单个参数。但是,如果[1,2]
的字符串表示形式是“1,2”
您没有解释所需的结果是什么,但如果要为提供的输入选择所有地址,则应使用.filter
。您可以将提供的参数转换为一个集合,以便快速查找
只需从函数返回结果,而不是将值赋给“外部”数组
让用户地址=[{
“街道”:“someStreet1”,
“房子”:“1”,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:“2”,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:“3”,
“person”:“User3”
}];
让addressToCheck=(…newUserHouse)=>{
newUserHouse=新集合(newUserHouse);
返回userAddress.filter(address=>newUserHouse.has(address.house));
};
控制台日志(addressToCheck(“3”,“2”))代码>在我的代码中,我忽略了一点,即rest参数是一个参数数组,为了操作它们,我们也必须对它们进行迭代
让用户地址=[{
“街道”:“someStreet1”,
“房子”:1,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:2,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:3,
“person”:“User3”
}]
让addressToCheck=(…房屋)=>{
出租房屋{
for(让用户使用userAddress){
如果(user.house==房屋){
console.log(用户);
打破
}
}
}
}
日志(addressToCheck(1,3))代码>在我的代码中,我忽略了一点,即rest参数是一个参数数组,为了操作它们,我们也必须对它们进行迭代
让用户地址=[{
“街道”:“someStreet1”,
“房子”:1,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:2,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:3,
“person”:“User3”
}]
让addressToCheck=(…房屋)=>{
出租房屋{
for(让用户使用userAddress){
如果(user.house==房屋){
console.log(用户);
打破
}
}
}
}
日志(addressToCheck(1,3))代码>使用ES6实现这一点的一种功能性方法是在自定义函数中使用数组的和方法(即GetUsersMatchingHouseNumber
),如下要点所示:
const userData=[{
“街道”:“someStreet1”,
“房子”:1,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”: